当我们尝试将庞大的Pandas数据帧(4千万到5千行)转换为Spark 2.0数据帧时,如何提高性能

时间:2017-07-12 14:23:56

标签: python pandas pyspark spark-dataframe

我正在尝试使用以下代码将我的pandas数据帧转换为spark 2.0数据帧:

spark_df= sqlContext.createDataFrame(pandas_df)

我有几个问题:

  1. 我想了解当我们尝试将pandas数据帧转换为spark数据帧时内部会发生什么。 据我了解当我们尝试使用toPandas()方法将spark转换为pandas时内部会发生什么,就像整个事情来到驱动程序等。
  2. 我正在将熊猫变成火花,但它花了太多时间似乎超过10-12小时。 我能想到的一个原因是因为大熊猫数据帧大约有4300万行。 期待知道是否可以获得一些性能提升? 或者,如果我明确提供架构,它会有帮助吗?或任何建议?

1 个答案:

答案 0 :(得分:1)

为什么要从这种大小的pandas DF创建Spark DF。它没有任何意义。这是一个巨大的开销,因为你通过pandas DF将数据加载到内存中,然后再加载到Spark中。不确定您的设置如何像内存,群集大小等,但如果您在本地计算机上,这可能会耗尽您的记忆。

我的建议,因为pandas DF有一个关系格式,我想你是从csv文件(或任何其他像tsv等)创建你的DataFrame。更好的解决方案是通过DataFrameReader将其直接加载到Spark DataFrame中。您也可以传递架构,然后加载甚至会更快。