Spark DataFrame分区程序为None

时间:2018-10-23 10:43:19

标签: scala apache-spark

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

使用->

进行分区
data_frame.repartition("column_name")

根据Spark文档,默认分区程序是HashPartitioner,如何确认呢?

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

1 个答案:

答案 0 :(得分:1)

这是意料之中的。 RDD是从Dataset doesn'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是不可配置的。