【发布时间】:2018-02-15 15:22:08
【问题描述】:
我想将 PySpark 数据帧 (pyspark.sql.DataFrame) 转换为 Pandas 数据帧。有一个内置方法 toPandas() 效率非常低(请阅读 Wes McKinney 在 2017 年 Fenruary here 中关于此问题的文章以及他在 this jupyter notebook 中的计算)。
与此同时,我们已经做出了一些努力来加快这种转换。例如,Josh 的函数here。但是,这对我没有帮助,因为我希望将 +1M 行从 pysaprk.DataFrame 转移到 Pandas,这个解决方案对我不起作用。
幸运的是,如 2017 年 7 月 26 日的this post 所示,感谢作者Wes、Li 和Holden,由于Apache Arrow 在@ 中的实现,toPandas() 的功能得到了显着改进987654337@。话虽如此,我无法访问 Spark 2.3(我使用的是 Spark 2.1)。
所以,我的问题是如何使用Apache Arrow 功能将pyspark 数据帧快速转换为Pandas,以便Spark 早于2.1。我认为很多人都坚持使用旧版本的 Spark 并且可以从中受益。
更新1:有人建议我先打印pyspark到CSV文件,然后从Pandas强大的read_csv方法读取CSV文件。我真的希望我能找到一种方法来避免这样做!
更新 2:toPandas() 方法缓慢的原因和可能的out of memory 问题在this discussion 中详细讨论
dfSpark = spark.sql(sqlQuery)
df = dfSpark.toPandas() # Very slow / out of memory error
【问题讨论】:
标签: pandas dataframe pyspark apache-arrow