2016-01-18 8 views
6

私はrddにキーの値のペアを含んでいます。ちょうど3つのキーがあり、私はテキストファイルに与えられたキーのすべての要素を書きたいと思います。現在、私は3回のパスでこれをやっていますが、私は1回のパスでそれを行うことができるかどうかを見たいと思っていました。PySparkの複数のファイルにRDDを書き込む

# 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) 

この作品は、しかし、それをキャッシュし、長いプロセスになることが3回を反復処理:ここで

は、私がこれまで持っているものです。 3つのファイルを同時に書き込む方法があるのだろうか?

+0

このため問題がありますに:https://issues.apache.org/jira/browse/SPARK-3533。回避策はここに掲載されています:http://stackoverflow.com/questions/23995040/write-to-multiple-outputs-by-key-spark-one-spark-job –

答えて

1

例えばカスタマイズされたパーティション分割(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 
    } 
    } 
} 
+1

これはPythonで記述できますか? – mgoldwasser

関連する問題