我从一个表中选择所有内容,然后使用Pyspark在其中创建一个数据框(df)。分区为:
partitionBy('date', 't', 's', 'p')
现在我想通过使用获取分区数量
df.rdd.getNumPartitions()
,但是它返回的数字(15642个分区)要大得多(18个分区):
在配置单元中显示分区命令:
date=2019-10-02/t=u/s=u/p=s
date=2019-10-03/t=u/s=u/p=s
date=2019-10-04/t=u/s=u/p=s
date=2019-10-05/t=u/s=u/p=s
date=2019-10-06/t=u/s=u/p=s
date=2019-10-07/t=u/s=u/p=s
date=2019-10-08/t=u/s=u/p=s
date=2019-10-09/t=u/s=u/p=s
date=2019-10-10/t=u/s=u/p=s
date=2019-10-11/t=u/s=u/p=s
date=2019-10-12/t=u/s=u/p=s
date=2019-10-13/t=u/s=u/p=s
date=2019-10-14/t=u/s=u/p=s
date=2019-10-15/t=u/s=u/p=s
date=2019-10-16/t=u/s=u/p=s
date=2019-10-17/t=u/s=u/p=s
date=2019-10-18/t=u/s=u/p=s
date=2019-10-19/t=u/s=u/p=s
有人知道为什么分区数量如此之大吗?以及如何获得预期的分区数(18)
答案 0 :(得分:0)
我发现了绕行更简单的方法:
>>> t = spark.sql("show partitions my_table")
>>> t.count()
18
答案 1 :(得分:0)
spark.sql("show partitions hivetablename").count()
rdd中的分区数与配置单元分区不同。 Spark通常根据集群中执行程序的数量对rdd进行分区,以便每个执行程序都能公平地分担任务。 您可以使用sc.parallelize(,)),df.repartition()或coalesce()来控制rdd分区。