scala - Spark DataFrame 分区器为无
问题描述
[Spark 新手] 创建 DataFrame 后,我尝试根据 DataFrame 中的列对其进行分区。当我使用我检查分区器时,data_frame.rdd.partitioner
我得到None作为输出。
使用 -> 进行分区
data_frame.repartition("column_name")
根据 Spark 文档,默认分区器是 HashPartitioner,我该如何确认?
另外,如何更改分区程序?
解决方案
这是可以预料的。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
不可配置。
推荐阅读
- javascript - 使用 foreach 更新数组的特定列键的每个值
- css - 如何更改字体真棒图标的颜色
- c# - WPF Storyboard 的 DoubleAnimation 行为异常
- ios - RxDataSources `Generic parameter 'Self' could not be inferred`
- c# - 从一个对象列表复制到具有相同结构的另一个对象列表
- visual-studio-code - MSBUILD 从 tasks.json 失败,但从 VS Code 终端运行
- html - Flexbox 内的响应表不起作用
- r - Rate of Growth by Rows in R
- outlook - How to update outlook Search folder result for a new search programmaticaly without changing the folder name
- powershell - 如何使用 Powershell 启动进程 [System.Diagnostics.Process]::Start with more the one parameter