【问题标题】:Pyspark: OutOfMemoryError on count()Pyspark:计数()上的 OutOfMemoryError
【发布时间】:2018-06-04 08:25:11
【问题描述】:

这是对我之前的one 的后续查询:根据建议,我得到了逐行百分比更改,并且由于 df_diff 数据帧 (df) 中的第一行都是空值,所以我做了:

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 来说并不理想

【问题讨论】:

    标签: python dataframe pyspark


    【解决方案1】:

    您的原始代码根本无法扩展。关注

    w = Window.orderBy("index")
    

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

    根据数据,你可以尝试更复杂的方法,比如Avoid performance impact of a single partition mode in Spark window functions中的那个

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 2018-06-09
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多