我有一个pandas dataframe data_pandas
,其大约有半百万行和30000列。我希望这是在Spark DataFrame data_spark
中,我实现了以下方面的实现:
data_spark = sqlContext.createDataFrame(data_pandas)
我正在研究R3.8xlarge驱动程序,其中10位具有相同配置的工人。但是上述操作需要永远并返回OOM错误。有我可以尝试的替代方法吗?
HDF格式的源数据,因此我无法直接将其作为火花数据框架读取。
您可以尝试使用箭头,这可以使其更有效。
spark.conf.set("spark.sql.execution.arrow.enabled","true)
有关更多详细信息,请参阅:https://bryancutler.github.io/topandas/
一种方法可以是从批处理读取数据框架而不是一次读取数据,一种方法是使用下面的代码将其分为20个块(的某些部分)这里和这里的问题的解决方案)
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)