Spark自定义分区(Partitioner)
来源:互联网 发布:小说大纲软件 编辑:程序博客网 时间:2024/05/02 04:45
我们都知道Spark内部提供了HashPartitioner
和RangePartitioner
两种分区策略(这两种分区的代码解析可以参见:《Spark分区器HashPartitioner和RangePartitioner代码详解》),这两种分区策略在很多情况下都适合我们的场景。但是有些情况下,Spark内部不能符合咱们的需求,这时候我们就可以自定义分区策略。为此,Spark提供了相应的接口,我们只需要扩展Partitioner
抽象类,然后实现里面的三个方法:
def numPartitions: Int
:这个方法需要返回你想要创建分区的个数;
def getPartition(key: Any): Int
:这个函数需要对输入的key做计算,然后返回该key的分区ID,范围一定是0到numPartitions-1
;
equals()
:这个是Java标准的判断相等的函数,之所以要求用户实现这个函数是因为Spark内部会比较两个RDD的分区是否一样。
假如我们想把来自同一个域名的URL放到一台节点上,比如:http://www.iteblog.com
和http://www.iteblog.com/archives/1368
,如果你使用HashPartitioner
,这两个URL的Hash值可能不一样,这就使得这两个URL被放到不同的节点上。所以这种情况下我们就需要自定义我们的分区策略,可以如下实现:
因为hashCode
值可能为负数,所以我们需要对他进行处理。然后我们就可以在partitionBy()
方法里面使用我们的分区:
类似的,在Java中定义自己的分区策略和Scala类似,只需要继承org.apache.spark.Partitioner
,并实现其中的方法即可。
在Python中,你不需要扩展Partitioner类,我们只需要对iteblog.partitionBy()
加上一个额外的hash函数,如下:
- Spark自定义分区(Partitioner)
- Spark自定义分区(Partitioner)
- Spark自定义分区(Partitioner)
- Spark自定义分区(Partitioner)
- Spark自定义分区(Partitioner)
- Spark Partitioner自定义分区
- Spark自定义分区(Partitioner)
- Hadoop自定义分区Partitioner
- spark 自定义partitioner
- spark的自定义partitioner
- spark用程序提交任务到yarn Spark自定义分区(Partitioner) textfile使用小技巧 createDirectStream
- 自定义分区partitioner实现数据分区存储
- spark-0.8.0源码剖析-分区Partitioner
- hadoop自定义分区操作(Partitioner) 步骤1.3
- Spark-partitioner
- Hadoop系列学习–Partitioner内置分区与Partitioner自定义分区
- spark自定义分区
- hadoop编程小技巧(3)---自定义分区类Partitioner
- Json对象与Json字符串互转(4种转换方式) jquery 以及 js 的方式
- MYSQL使用group by,如何查询出总记录数
- java正则表达式
- VideoView的onPreparedListener
- 大神级程序员和普通程序员的区别
- Spark自定义分区(Partitioner)
- Mybatis Generator(代码生成器)
- POJ 1611 The Suspects( 并查集)
- Linked List Cycle II
- 包装流(BufferedReader)
- OpenResty学习笔记(一)数据结构与控制流
- 如何解决atom无法安装package的问题(gyp WARN install got an error, rolling back install)
- SpringMVC之ContentNegotiatingViewResolver详解
- github