我们可以使用SizeEstimator.estimate估算RDD/DataFrame的大小吗?

Sai*_*hna 7 apache-spark

我有一个DataFrame,它将由hiveContext通过执行Hive SQL创建,在我的情况下,查询的数据应该被推送到不同的数据存储区.

由于我试图执行的SQL,DataFrame有数千个分区.

要将数据推送到数据存储区,我使用mapPartitions()并获取连接并推送数据.

由于分区数量的原因,数据目标上的负载非常高,我可以coalsec()根据DataFrame的大小将分区数量设置为所需的数量.

在我的所有情况下,SQL生成的数据量并不相同.在少数情况下,它可能是几百个记录,在极少数情况下可能会达到几百万.因此,我需要一种动态的方式来决定分区的数量coalsec().

在谷歌搜索后,我可以看到我们可以SizeEstimator.estimate()用来估计DataFrame的大小,然后根据一些计算划分计数以获得分区数.但看的执行SizeEstimator.estimate火花的回购协议向我表明它已换一个单个JVM站立点实施,应该用于像广播变量等对象,而不是RDDS/DataFrames其跨JVM的分布.

任何人都可以建议如何解决我的问题?如果我的理解是错误的,请告诉我.

Ram*_*ram 1

我们可以使用 SizeEstimator.estimate 来估计 RDD/DataFrame 的大小吗?

不,我们不能用于估计 RDD 或 Dataframe 的大小。它会给出不同的尺寸。

如果磁盘上有 parquetfile.. 您可以根据您可以决定的分区数量使用估计来了解文件的确切大小...

Spark 的 repo 向我展示了它是针对单个 JVM 观点实现的,应该用于广播变量等对象,但不适用于分布在 JVM 上的 RDD/DataFrame

这是对的。

请参阅 Spark SizeEstimatorSuite.scala中的测试类以更好地理解它......