【问题标题】:Convert a spark DataFrame to pandas DF将 spark DataFrame 转换为 pandas DF
【发布时间】:2018-11-30 04:58:05
【问题描述】:

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

我尝试了以下方法:

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

 ).toDF(
"user_id", "phone_number")

代码:

%pyspark
pandas_df = some_df.toPandas()

错误:

 NameError: name 'some_df' is not defined

任何建议。

【问题讨论】:

  • 你不用var声明python变量
  • @user3483203 是的,我使用 Spark 和 Scala 解释器在笔记本中创建了数据框。并在尝试将 DF 转换为 pandas DF 时使用了 '%pyspark'。
  • 你为什么要混合 scala 和 pyspark。只用一个
  • @RameshMaharjan 是的,我使用 scala。但我正在尝试为 Spark DF 中的列构建可视化,但我找不到相关来源。
  • 什么样的可视化?

标签: pandas apache-spark apache-spark-sql


【解决方案1】:

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

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

pd_df = df_spark.toPandas()

我已经在 DataBricks 中尝试过。

【讨论】:

  • 强烈推荐使用 spark.sql.execution.arrow.enabled 选项,尤其是在即将发布的 spark 3.2 版本中使用 pyspark.pandas
【解决方案2】:

在我的例子中,从 spark 数据帧到 pandas 数据帧的以下转换有效:

pandas_df = spark_df.select("*").toPandas()

【讨论】:

  • 没有必要把select("*") 放在df 上,除非你想要一些特定的列。这不会影响性能,因为它是惰性执行,不会做任何事情。
  • 出于某种原因,@Inna 的解决方案是唯一适用于我的数据框的解决方案。除非事先选择所有列,否则无法进行转换。数据类型和平时一样,但我之前应用了 UDF。
  • 我正在使用它,但我的大多数 spark 十进制列都转换为 pandas 中的对象而不是 float。我有 100 多列。有没有办法可以修改这种类型转换?
  • 您可以编写一个函数并对其进行类型转换
【解决方案3】:

以下应该可以工作

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

【讨论】:

  • 答案的toDF(...) 是一个红鲱鱼,为了清楚起见应该删除,IMO。它已经存在于问题中。这就是为什么我更新了以下答案。
  • 在这种情况下“sc”代表什么?
  • @Gabriel 这是火花上下文
  • 感谢您的回答。尝试将此应用于我在 pySpark 3.2.0 上的代码,但我收到一个错误,即基于 spark.apache.org/docs/latest/api/python/reference/api/…> 的函数 parallelize 现在需要第二个参数 c。试图用example_df = sc\ .parallelize([ ("A", "no"), ("B", "yes"), ("B", "yes"), ("B", "no")], c=4)\ .toDF( ["user_id", "phone_number"] ) 添加一个常量c 得到另一个错误:AttributeError: 'list' object has no attribute 'defaultParallelism'
猜你喜欢
  • 2017-03-17
  • 2017-05-17
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 2015-12-09
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多