将Spark DataFrame转换为Pandas DF

vik*_*kky 19 pandas apache-spark apache-spark-sql

有没有办法将Spark Df(不是RDD)转换为熊猫DF

我尝试了以下方法:

var some_df = Seq(
 ("A", "no"),
 ("B", "yes"),
 ("B", "yes"),
 ("B", "no")

 ).toDF(
"user_id", "phone_number")
Run Code Online (Sandbox Code Playgroud)

码:

%pyspark
pandas_df = some_df.toPandas()
Run Code Online (Sandbox Code Playgroud)

错误:

 NameError: name 'some_df' is not defined
Run Code Online (Sandbox Code Playgroud)

有什么建议么。

Inn*_*na 24

在我的情况下,从 spark 数据帧到熊猫数据帧的以下转换有效:

pandas_df = spark_df.select("*").toPandas()
Run Code Online (Sandbox Code Playgroud)

  • 除非您想要一些特定的列,否则不需要将 `select("*")` 放在 `df` 上。这不会影响性能,因为它是惰性执行并且不会执行任何操作。 (6认同)
  • 由于某种原因,@Inna 的解决方案是唯一适用于我的数据框的解决方案。除非事先选择所有列,否则无法进行转换。数据类型与通常相同,但我之前应用了 UDF。 (2认同)

Gau*_*hah 20

以下应该工作

some_df = sc.parallelize([
 ("A", "no"),
 ("B", "yes"),
 ("B", "yes"),
 ("B", "no")]
 ).toDF(["user_id", "phone_number"])
pandas_df = some_df.toPandas()
Run Code Online (Sandbox Code Playgroud)

  • @Gabriel 这是火花背景 (2认同)

小智 5

如果您有大型数据框,将 spark 数据框转换为 Pandas 可能需要一些时间。因此,您可以使用以下内容:

spark.conf.set("spark.sql.execution.arrow.enabled", "true")

pd_df = df_spark.toPandas()
Run Code Online (Sandbox Code Playgroud)

我在 DataBricks 中尝试过这个。

  • SQL 配置“spark.sql.execution.arrow.enabled”已在 Spark v3.0 中弃用,并且将来可能会被删除。使用“spark.sql.execution.arrow.pyspark.enabled”代替它。 (2认同)
  • 您能解释一下为什么它会提高效率吗? (2认同)