获取pyspark中的分区数

get number of partitions in pyspark

我 select 全部来自 table 并使用 Pyspark 从中创建数据框 (df)。分区为:

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

现在我想通过使用

获取分区数
  df.rdd.getNumPartitions()

但它 returns 比预期的(18 个分区)大得多(15642 个分区):

配置单元中的显示分区命令:

 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)

我找到了更省事的方法:

>>> t  = spark.sql("show partitions my_table")
>>> t.count()
18  
spark.sql("show partitions hivetablename").count()

rdd中的分区数与hive分区不同。 Spark 通常会根据集群中执行程序的数量对您的 rdd 进行分区,以便每个执行程序都能公平地分配任务。 您可以使用 sc.parallelize(, )) 、 df.repartition() 或 coalesce().

来控制 rdd 分区