【问题标题】:Caching intermediate dataframes to test spark performance缓存中间数据帧以测试火花性能
【发布时间】:2018-03-12 17:04:53
【问题描述】:

我需要衡量我的 PySpark 代码的性能。为了消除不应影响运行时间的预处理步骤的影响,我缓存了我的中间数据帧。也就是说,

for i in iiis:
    df_cache = ini_df.sample(False, 1/len(iiis))
    df_cache.cache.count()

但是,每次尝试执行此操作时都会耗尽内存,因为原始数据框太大。知道如何在不使用 cache 函数的情况下测量代码的运行时间吗?

【问题讨论】:

  • 有点不清楚你在这里测量哪段代码的性能。我想您的要求是避免延迟计算并破坏数据帧的沿袭,以便您可以衡量单个操作的性能。在这种情况下,我建议你坚持到磁盘。
  • 是的。我试图在这里避免惰性计算。我的问题是我没有足够的内存来存储缓存的数据,但我的 spark 作业必须具有较低的 RAM 要求并且同时足够快。
  • 在这种情况下,您必须避免缓存到内存,正如我建议的那样尝试将其持久化到磁盘,这会破坏血统。

标签: apache-spark optimization pyspark


【解决方案1】:

如果你的数据框对于内存来说太大了,你应该尝试在磁盘上persist它。

from pyspark import StorageLevel
df_cache.persist(StorageLevel.DISK_ONLY)

在我的环境中,仅保留在磁盘上或仅保留在内存上会产生相同的性能。

【讨论】:

  • 这会很奇怪,如果它几乎相同,但可能在较小的 df 上。在大的(拳头到 RAM)上,它应该有很大的不同,即使是 SSD 磁盘。
猜你喜欢
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多