我有一个包含键值对的rdd。只有3个键,我想将给定键的所有元素写入文本文件。目前我正在进行3次传球,但我想看看我是否可以一次传球。
这是我到目前为止所做的:
# I have an rdd (called my_rdd) such that a record is a key value pair, e.g.:
# ('data_set_1','value1,value2,value3,...,value100')
my_rdd.cache()
my_keys = ['data_set_1','data_set_2','data_set_3']
for key in my_keys:
my_rdd.filter(lambda l: l[0] == key).map(lambda l: l[1]).saveAsTextFile(my_path+'/'+key)
这是有效的,但是缓存它并迭代三次可能是一个漫长的过程。我想知道是否有办法同时写入所有三个文件?
答案 0 :(得分:2)
使用自定义分区程序(在写入输出文件之前对数据集进行分区,与Def_Os提供的方法相比)的替代方法
例如:
RDD[(K, W)].partitionBy(partitioner: Partitioner)
class CustmozedPartitioner extends Partitioner {
override def numPartitions: Int = 4
override def getPartition(key: Any): Int = {
key match {
case "data_set_1" => 0
case "data_set_2" => 1
case "data_set_3" => 2
case _ => 3
}
}
}