【问题标题】:How to estimate dataframe real size in pyspark?如何估计pyspark中的数据框实际大小?
【发布时间】:2016-09-01 19:48:31
【问题描述】:

如何确定数据框的大小?

现在我估计数据框的实际大小如下:

headers_size = key for key in df.first().asDict()
rows_size = df.map(lambda row: len(value for key, value in row.asDict()).sum()
total_size = headers_size + rows_size

太慢了,我正在寻找更好的方法。

【问题讨论】:

  • 你必须收集RDD来确定它的大小,所以对于大数据集当然会很慢
  • 我正在考虑使用 SizeEstimator 对象来估计 rdd 的样本。不幸的是,我无法在 python 中找到它。
  • 我认为这可以解决您的问题。 spark.apache.org/docs/latest/…
  • 我实际上正在寻找我所说的python实现。 @cricket_007

标签: python apache-spark dataframe spark-csv


【解决方案1】:

目前我正在使用以下方法,但不确定这是否是最好的方法:

df.persist(StorageLevel.Memory)
df.count()

Storage 选项卡下的 spark-web UI 上,您可以检查以 MB 为单位显示的大小,然后我会继续清除内存:

df.unpersist()

【讨论】:

  • 谢谢,我可以在存储选项卡中查看大小。 Gr8 帮助
  • 如果你有一个非常大的数据集,这可能是个坏主意。
  • 如果你有一个非常大的数据集,这只是一个问题或采样(例如 df.sample(.01))并遵循相同的步骤。然后你可以估计整个数据集的大小。
  • 使用 df.persist(StorageLevel.MEMORY_AND_DISK)
【解决方案2】:

来自 Tamas Szuromi http://metricbrew.com/how-to-estimate-rdd-or-dataframe-real-size-in-pyspark/ 的好帖子

from pyspark.serializers import PickleSerializer, AutoBatchedSerializer
def _to_java_object_rdd(rdd):  
    """ Return a JavaRDD of Object by unpickling
    It will convert each Python object into Java object by Pyrolite, whenever the
    RDD is serialized in batch or not.
    """
    rdd = rdd._reserialize(AutoBatchedSerializer(PickleSerializer()))
    return rdd.ctx._jvm.org.apache.spark.mllib.api.python.SerDe.pythonToJava(rdd._jrdd, True)

JavaObj = _to_java_object_rdd(df.rdd)

nbytes = sc._jvm.org.apache.spark.util.SizeEstimator.estimate(JavaObj)

【讨论】:

  • 这应该如何工作?我已经测试了这段代码,在我看来,结果更像是一个“随机函数”作为估计。或者也许我误解了他们?我在 cdh 5.11.2 中使用 spark 1.6
  • 无论数据框如何,这对我来说总是返回相同的大小。它总是返回 216 MB。
  • 我看到的变化很小——从 185,704,232 到 186,020,448 到 187,366,176。但是,记录数从 5 变为 2,000,000 到 1,500,000,000。
  • 我用的是pyspark 2.4.4,不工作,TypeError javaPackage not callable
  • 不要使用这个。这不是真正的内存使用。它报告一个有 1B 条记录的 DataFrame 和另一个有 10M 条记录的数据框的关闭数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2020-01-17
  • 1970-01-01
相关资源
最近更新 更多