在我的应用程序中,我有一个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);
它是压缩的 - 而不是真正的大小。 不是最好的资源规划。
为什么SizeEstimator与文件的实际大小之间存在如此巨大的差异,这是否有意义?
在保存之前是否还有其他有效的方法来估算每个分区数据大小(未压缩)?
我的整个代码都是Java-因此首选java解决方案。