[Spark的新手]
创建了DataFrame之后,我尝试根据DataFrame中的列对其进行分区。当我使用data_frame.rdd.partitioner
检查分区程序时,输出为 None 。
使用->
进行分区data_frame.repartition("column_name")
根据Spark文档,默认分区程序是HashPartitioner,如何确认呢?
此外,如何更改分区程序?
答案 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
是不可配置的。