men*_*gwu 4 scala apache-spark apache-spark-sql
我有一个RDD
,则RDD' partition
结果变为200,当我使用window
,我不能改变partition
,当我使用window
?
这是我的代码:
val rdd= sc.parallelize(List(1,3,2,4,5,6,7,8),4)
val result = rdd.toDF("values").withColumn("csum", sum(col("values")).over(Window.partitionBy(col("values")))).rdd
println(result.getNumPartitions + "rdd2")
Run Code Online (Sandbox Code Playgroud)
我的输入分区是4,为什么结果分区是200?
我希望我的结果分区也是 4。
有没有更清洁的解决方案?
注意:正如@eliasah 所提到的 - 使用带 spark 的窗口函数时无法避免重新分区
- 为什么结果分区是 200?
Spark doc
默认值spark.sql.shuffle.partitions
配置用于连接或聚合的数据混洗时要使用的分区数 - 为 200
- 我怎样才能重新分区到4?
您可以使用:
coalesce(4)
Run Code Online (Sandbox Code Playgroud)
或者
repartition(4)
Run Code Online (Sandbox Code Playgroud)
coalesce(numPartitions) 将 RDD 中的分区数减少到 numPartitions。在过滤大型数据集后更有效地运行操作很有用。
repartition(numPartitions)随机重组 RDD 中的数据以创建更多或更少的分区并在它们之间进行平衡。这总是在网络上打乱所有数据。
归档时间: |
|
查看次数: |
1139 次 |
最近记录: |