按分区大小估计Spark DataSet - 未压缩

时间:2018-03-21 09:54:41

标签: java apache-spark dataset spark-dataframe

在我的应用程序中,我有一个X行的spark数据集 我有不同的CSV文件,每个文件都有不同的大小和结构。 我正在通过此CSV生成数据集。

在发布此问题之前,我看到了以下问题:

我需要在运行时计算每个分区的大小 文件的结果是ORC(snappy压缩)

提供使用尺寸估算器的所有上述问题

所以我也读到了Size Estimator

当我尝试使用

的尺寸估算器时
SizeEstimator.estimate(dataFrame.rdd().partitions())

我得到了这个结果:71.124 MB,我还尝试使用部分文件读取的样本的estimate - 这会产生相同的大小。

看到这个结果 - 只是没有意义,这里有更多细节:

Source file size 44.8 KB (CSV) - 300 rows.

SizeEstimator.estimate(dataSet.rdd().partitions()) 71.124 MB

运行时的实际数据帧结果存储到S3:

dataSet.write().partitionBy(partitionColumn).option("header", "true").mode(SaveMode.Append).format("snappy").save(pathTowrite);
  • 我想知道没有的dataFrame文件的实际大小 压缩
  • 保存后我宁愿不从S3读取文件:
  • 它是压缩的 - 而不是真正的大小。         不是最好的资源规划。

    1. 为什么SizeEstimator与文件的实际大小之间存在如此巨大的差异,这是否有意义?

    2. 在保存之前是否还有其他有效的方法来估算每个分区数据大小(未压缩)?

我的整个代码都是Java-因此首选java解决方案。

1 个答案:

答案 0 :(得分:0)

现在,我能够使用一种效率不高的临时解决方案

Spark DataSet efficiently get length size of entire row