【问题标题】:get number of partitions in pyspark获取pyspark中的分区数
【发布时间】:2020-02-16 09:47:55
【问题描述】:

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

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

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

  df.rdd.getNumPartitions()

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

在 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)

【问题讨论】:

    标签: dataframe pyspark rdd hive-partitions


    【解决方案1】:

    我找到了一条更简单的弯路:

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

    【讨论】:

      【解决方案2】:
      spark.sql("show partitions hivetablename").count()
      

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

      【讨论】:

        猜你喜欢
        • 2021-12-12
        • 2018-08-21
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 2020-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多