我有一个pandas数据帧data_pandas
,它有大约五十万行和30000列。我希望它在Spark数据帧data_spark
中,我通过以下方式实现:
data_spark = sqlContext.createDataFrame(data_pandas)
我正在开发一个r3.8xlarge驱动程序,其中包含10个具有相同配置的worker。但上述操作需要永远,并返回OOM错误。我可以尝试另一种方法吗?
源数据采用HDF格式,因此我无法直接将其作为Spark数据帧读取。
答案 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/