Pyspark:count()上的OutOfMemoryError

时间:2018-06-04 08:25:12

标签: python dataframe pyspark

这是对我之前的one的后续查询:以下建议我得到了行上行百分比更改,因为df_diff数据帧(df)中的第一行都是空值,I做的:

df_diff = df_diff.dropna()
df_diff.count()

第二个语句抛出以下错误:

Py4JJavaError: An error occurred while calling o1844.count.
: java.lang.OutOfMemoryError: Java heap space

当我尝试在上一篇文章中发布的玩具df上面的代码时,它工作正常但是我的实际数据框(834行,51列)发生了上述错误。关于为什么会发生这种情况以及如何处理它的任何指导都将非常感激。谢谢

编辑:

在我的834 X 51的实际数据框(df)中,第一列是日期,其余列是关闭我试图获得每日百分比变化的50只股票的股票价格。按日期col对窗口进行分区与pyspark中此df中的先前错误没有任何区别,并且似乎没有任何其他自然候选分区。

唯一有效的方法就是在spark-shell中做到这一点。在没有分区的情况下,我收到了警告信息......

WindowExec: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.

...直到我在数据帧上调用cache(),但这对于大型df来说并不理想

1 个答案:

答案 0 :(得分:0)

您的原始代码根本无法扩展。以下

w = Window.orderBy("index")

窗口定义需要将数据混洗到单个分区,这对于小型本地数据集非常有用。

根据数据,您可以尝试更复杂的方法,例如Avoid performance impact of a single partition mode in Spark window functions

中的一个节目