首页 > 解决方案 > Spark DataFrame 分区器为无

问题描述

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

使用 -> 进行分区

data_frame.repartition("column_name")

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

另外,如何更改分区程序?

标签: scalaapache-spark

解决方案


这是可以预料的。RDD从 a 转换Dataset 不保留 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不可配置。


推荐阅读