Spark 数据集自定义分区器

Posted

技术标签:

【中文标题】Spark 数据集自定义分区器【英文标题】:Spark dataset custom partitioner 【发布时间】:2017-02-06 15:25:44 【问题描述】:

能否请您帮我找到用于将 sales 数据集重新分区为 N 大小相等的分区的 Java API? 大小相等是指行数相等。

Dataset<Row> sales = sparkSession.read().parquet(salesPath);
sales.toJavaRDD().partitions().size(); // returns 1

【问题讨论】:

How to Define Custom partitioner for Spark RDDs of equally sized partition where each partition has equal number of elements?的可能重复 @BradleyKaiser 不,我确信答案很糟糕,原因有两个:1)答案显示分区器的代码,但不指出如何将自定义分区器传递给 RDD API,这实际上是一个问题2) partitioner 代码是 Scala 的,Scala API 可能与 Java API 不同 【参考方案1】:

数据集不支持 AFAIK 自定义分区器。 Spark 2+ 中 Dataset 和 Dataframe API 的整个想法是抽象出干预自定义分区器的需要。因此,如果我们面临处理数据倾斜的需要并且到了自定义分区器是唯一选择的地步,我想我们会使用较低级别的 RDD 操作。

例如:Facebook use-case-study 和 Spark summit talk related to the use-case-study

关于为 RDD 定义分区器,在 API doc 中有很好的记录

【讨论】:

以上是关于Spark 数据集自定义分区器的主要内容,如果未能解决你的问题,请参考以下文章

spark自定义分区器

spark自定义分区器实现

使用自定义分区器解决Spark DataSet数据分区不均匀的问题

大数据入门第二十二天——spark自定义分区排序与查找

Google 跟踪代码管理器自定义变量返回未定义

apache spark中的自定义分区器