我有一个DataFrame,它将由hiveContext通过执行Hive SQL创建,在我的情况下,查询的数据应该被推送到不同的数据存储区.
由于我试图执行的SQL,DataFrame有数千个分区.
要将数据推送到数据存储区,我使用mapPartitions()并获取连接并推送数据.
由于分区数量的原因,数据目标上的负载非常高,我可以coalsec()根据DataFrame的大小将分区数量设置为所需的数量.
在我的所有情况下,SQL生成的数据量并不相同.在少数情况下,它可能是几百个记录,在极少数情况下可能会达到几百万.因此,我需要一种动态的方式来决定分区的数量coalsec().
在谷歌搜索后,我可以看到我们可以SizeEstimator.estimate()用来估计DataFrame的大小,然后根据一些计算划分计数以获得分区数.但看的执行SizeEstimator.estimate在火花的回购协议向我表明它已换一个单个JVM站立点实施,应该用于像广播变量等对象,而不是RDDS/DataFrames其跨JVM的分布.
任何人都可以建议如何解决我的问题?如果我的理解是错误的,请告诉我.
apache-spark ×1