【问题标题】:Spark DataFrame partitioner is NoneSpark DataFrame 分区器为无
【发布时间】:2018-10-23 10:43:18
【问题描述】:

[Spark 新手] 创建 DataFrame 后,我尝试根据 DataFrame 中的列对其进行分区。当我使用 data_frame.rdd.partitioner 检查分区器时,我得到 None 作为输出。

使用->进行分区

data_frame.repartition("column_name")

根据 Spark 文档,默认分区器是 HashPartitioner,我如何确认?

另外,如何更改分区器?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    这是意料之中的。 RDDDatasetdoesn't preserve the partitioner转换而来,只有数据分布。

    如果您想检查 RDD 的分区器,您应该从 queryExecution 检索它:

    scala> val df = spark.range(100).select($"id" % 3 as "id").repartition(42, $"id")
    df: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [id: bigint]
    
    scala> df.queryExecution.toRdd.partitioner
    res1: Option[org.apache.spark.Partitioner] = Some(org.apache.spark.sql.execution.CoalescedPartitioner@4be2340e)
    

    如何更改分区器?

    一般来说你不能。存在repartitionByRange 方法(请参阅链接线程),否则Dataset Partitioner 是不可配置的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-06
      • 2018-01-19
      • 2017-01-15
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      相关资源
      最近更新 更多