我有一个DataFrame,它将由hiveContext通过执行Hive SQL创建,在我的情况下,查询的数据应该被推送到不同的数据存储区.
由于我试图执行的SQL,DataFrame有数千个分区.
要将数据推送到数据存储区,我使用mapPartitions()并获取连接并推送数据.
由于分区数量的原因,数据目标上的负载非常高,我可以coalsec()根据DataFrame的大小将分区数量设置为所需的数量.
在我的所有情况下,SQL生成的数据量并不相同.在少数情况下,它可能是几百个记录,在极少数情况下可能会达到几百万.因此,我需要一种动态的方式来决定分区的数量coalsec().
在谷歌搜索后,我可以看到我们可以SizeEstimator.estimate()用来估计DataFrame的大小,然后根据一些计算划分计数以获得分区数.但看的执行SizeEstimator.estimate在火花的回购协议向我表明它已换一个单个JVM站立点实施,应该用于像广播变量等对象,而不是RDDS/DataFrames其跨JVM的分布.
任何人都可以建议如何解决我的问题?如果我的理解是错误的,请告诉我.
我们可以使用 SizeEstimator.estimate 来估计 RDD/DataFrame 的大小吗?
不,我们不能用于估计 RDD 或 Dataframe 的大小。它会给出不同的尺寸。
如果磁盘上有 parquetfile.. 您可以根据您可以决定的分区数量使用估计来了解文件的确切大小...
Spark 的 repo 向我展示了它是针对单个 JVM 观点实现的,应该用于广播变量等对象,但不适用于分布在 JVM 上的 RDD/DataFrame
这是对的。
请参阅 Spark SizeEstimatorSuite.scala中的测试类以更好地理解它......
| 归档时间: |
|
| 查看次数: |
3095 次 |
| 最近记录: |