我有以下数据:
b 3
c 1
a 1
b 2
b 1
a 2
我希望按第一列重新分区3个部分,并保存为文件,结果应该是这样的(不需要排序):
//file: part-00000
a 1
a 2
//file: part-00001
b 3
b 2
b 1
//file: part-00002
c 1
我尝试调用重新分区功能,但它无法实现我的目的。
怎么做?非常感谢你!
答案 0 :(得分:1)
自定义分区程序只能与RDD一起使用以键入键/值,即PairRDDFunctions.partitionBy(partitioner: Partitioner)
。有关更多信息,请参阅firechat
。
答案 1 :(得分:1)
您需要调用partitionBy
- 函数来使用自定义分区程序对数据进行分区。我可以推荐阅读这本在线图书的数据分区" -section:https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html
答案 2 :(得分:0)
Sumit的回答者的更多补充:
实施您的custimized org.apache.spark.Partitioner
。
例如:
class AlphbetPartitioner extends Partitioner {
override def numPartitions: Int = 26
override def getPartition(key: Any): Int = {
return key.asInstanceOf[scala.Char].asDigit % numPartitions
}
}
PairRDDFunctions.partitionBy(partitioner: Partitioner)
val data = Array(('b', 3), ('c', 1), ('a', 1), ('b', 2), ('b', 1), ('a', 2))
val distData = sc.parallelize(data,1).map(u => (u._1, u._2)).partitionBy(new AlphbetPartitioner).map(u=>u._1+","+u._2+"\t")