让您的数据"点燃"Spark
在上一个练习中,您看到了如何将数据从 Spark 移动到 pandas。不过,您也许想反过来,把一个 pandas 的 DataFrame 放入 Spark 集群中!SparkSession 类同样提供了相应的方法。
.createDataFrame() 方法接收一个 pandas DataFrame,并返回一个 Spark DataFrame。
该方法的输出保存在本地,而不是存入 SparkSession 的目录(catalog)中。这意味着您可以对其使用所有 Spark DataFrame 方法,但无法在其他上下文中直接访问这些数据。
例如,引用您这个 DataFrame 的 SQL 查询(通过 .sql() 方法)会报错。若要以这种方式访问数据,您需要先将其保存为一个临时表(temporary table)。
您可以使用 Spark DataFrame 的 .createTempView() 方法来实现,这个方法只接收一个参数,即您希望注册的临时表名称。该方法会把 DataFrame 作为表注册到目录中,但由于这是临时表,只能从用于创建该 Spark DataFrame 的那个特定 SparkSession 中访问。
此外还有 .createOrReplaceTempView() 方法。如果原来没有同名表,它会安全地创建一个新的临时表;如果已经存在同名表,则会更新该表。为避免重复表导致的问题,您将使用此方法。
请查看下图,了解您的 Spark 数据结构之间可以如何互相配合。

工作空间中已经有名为 spark 的 SparkSession,并且已将 numpy 以 np 导入、pandas 以 pd 导入。
本练习是课程的一部分
PySpark 基础
练习说明
- 生成随机数的
pandasDataFrame 的代码已提供,并保存为pd_temp。 - 调用 Spark 的
.createDataFrame()方法,以pd_temp为参数,创建名为spark_temp的 Spark DataFrame。 - 查看 Spark 集群中的表列表,并确认新建的 DataFrame 不在其中。请记住可以使用
spark.catalog.listTables()。 - 使用
.createOrReplaceTempView()方法,将刚创建的spark_temp注册为一个临时表。该临时表应命名为"temp"。请记住,表名需要作为该方法的唯一参数传入! - 再次查看表列表。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Create pd_temp
pd_temp = pd.DataFrame(np.random.random(10))
# Create spark_temp from pd_temp
spark_temp = ____
# Examine the tables in the catalog
print(____)
# Add spark_temp to the catalog
spark_temp.____
# Examine the tables in the catalog again
print(____)