有没有更有效的方法将pandas数据帧转换为Spark数据帧?

时间:2017-12-11 11:05:26

标签: python pandas pyspark spark-dataframe

我有一个pandas数据帧data_pandas,它有大约五十万行和30000列。我希望它在Spark数据帧data_spark中,我通过以下方式实现:

data_spark = sqlContext.createDataFrame(data_pandas)

我正在开发一个r3.8xlarge驱动程序,其中包含10个具有相同配置的worker。但上述操作需要永远,并返回OOM错误。我可以尝试另一种方法吗?

源数据采用HDF格式,因此我无法直接将其作为Spark数据帧读取。

2 个答案:

答案 0 :(得分:0)

一种方法可以是批量读取pandas数据帧中的数据,而不是一次性读取,一种方法是使用下面的代码将其划分为20个块(问题的某些部分解决方案{{3 }和here

def unionAll(*dfs):
    ' by @zero323 from here: http://stackoverflow.com/a/33744540/42346 '
    first, *rest = dfs  # Python 3.x, for 2.x you'll have to unpack manually
    return first.sql_ctx.createDataFrame(
        first.sql_ctx._sc.union([df.rdd for df in dfs]),
        first.schema
    )

df_list = []
for chunk in np.array_split(df1,20):
    df_list.append(sqlContext.createDataFrame(chunk))

df_all = unionAll(df_list)

答案 1 :(得分:0)

您可以尝试使用箭头来提高效率。

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

有关更多详细信息,请参见:https://bryancutler.github.io/toPandas/