1

我从表中选择所有内容并使用 Pyspark 从表中创建一个数据框 (df)。其中划分为:

  partitionBy('date', 't', 's', 'p')

现在我想通过使用来获取分区数

  df.rdd.getNumPartitions()

但它返回一个比预期(18 个分区)大得多的数字(15642 个分区):

在 hive 中显示分区命令:

 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)

4

2 回答 2

1
spark.sql("show partitions hivetablename").count()

rdd 中的分区数与 hive 分区不同。Spark 通常根据集群中 executor 的数量对你的 rdd 进行分区,以便每个 executor 获得公平的任务份额。您可以使用 sc.parallelize(, )) 、 df.repartition() 或 coalesce() 来控制 rdd 分区。

于 2019-10-19T20:45:26.340 回答
0

我找到了一个更简单的方法:

>>> t  = spark.sql("show partitions my_table")
>>> t.count()
18  
于 2019-10-19T19:38:02.253 回答