2016-01-18 4 views
6

में कई फ़ाइलों में एक आरडीडी लिखना मेरे पास एक आरडीडी है जिसमें महत्वपूर्ण मूल्य जोड़े हैं। केवल 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

इस के लिए एक मुद्दा है : 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

क्या यह पायथन में लिखा जा सकता है? – mgoldwasser