2016-10-16 4 views
6

मेरे पास एक आरडीडी है जिसका तत्व प्रकार (लांग, स्ट्रिंग) है। किसी कारण से, मैं पूरे आरडीडी को एचडीएफएस में सहेजना चाहता हूं, और बाद में यह भी पढ़ता हूं कि आरपीडी एक स्पार्क कार्यक्रम में वापस आ गया है। क्या यह करना मुमकिन है? और यदि हां, तो कैसे?मैं आरडीडी को एचडीएफएस में कैसे सहेज सकता हूं और बाद में इसे वापस पढ़ सकता हूं?

उत्तर

5

यह संभव है।

आरडीडी में आपके पास saveAsObjectFile और saveAsTextFile फ़ंक्शन हैं। टुपल्स को (value1, value2) के रूप में संग्रहीत किया जाता है, ताकि आप इसे बाद में पार्स कर सकें।

पढ़ना SparkContext से textFile समारोह और उसके बाद .map साथ किया जा सकता ()

तो खत्म करने के लिए: संस्करण 1:

rdd.saveAsTextFile ("hdfs:///test1/"); 
// later, in other program 
val newRdds = sparkContext.textFile("hdfs:///test1/part-*").map (x => { 
    // here remove() and parse long/strings 
}) 

संस्करण 2:

rdd.saveAsObjectFile ("hdfs:///test1/"); 
// later, in other program - watch, you have tuples out of the box :) 
val newRdds = sparkContext.sc.sequenceFile("hdfs:///test1/part-*", classOf[Long], classOf[String]) 
+0

शपथ बनाने के लिए उदाहरण है। लेकिन हम टेक्स्टफाइल का उपयोग करके कैसे पढ़ सकते हैं, क्योंकि saveAsText कई अलग-अलग फाइलें बनायेगा। – pythonic

+0

@pythonic मेरा अपडेट देखें - आप फ़ाइल की रेंज पढ़ सकते हैं। आरडीडी का प्रत्येक भाग फाइल 'part-XYZŹŻ' में सहेजा जाता है, इसलिए हम इस तरह के नाम की प्रत्येक फाइल को पढ़ सकते हैं –

3

मैं करने के लिए सिफारिश करेंगे यदि आपका आरडीडी टैब्यूलर प्रारूप में है तो डेटाफ्रेम का उपयोग करें। एक डेटा फ्रेम एक तालिका है, या दो-आयामी सरणी जैसी संरचना है, जिसमें प्रत्येक कॉलम में एक चर पर माप होता है, और प्रत्येक पंक्ति में एक केस होता है। डेटाफ्रेम के टैबलेट प्रारूप के कारण अतिरिक्त मेटाडेटा है, जो स्पार्क को अंतिम क्वेरी पर कुछ अनुकूलन चलाने की अनुमति देता है। जहां एक आरडीडी एक लचीला वितरित डेटासेट है जो कि ब्लैकबॉक्स या डेटा के मूल अमूर्तता से अधिक है जिसे अनुकूलित नहीं किया जा सकता है। हालांकि, आप डेटाफ्रेम से आरडीडी तक जा सकते हैं और इसके विपरीत, और आप आरडीडी से डेटाफ्रेम (यदि आरडीडी टैब्यूलर प्रारूप में हैं) से डीडीएफ विधि के माध्यम से जा सकते हैं।

निम्नलिखित, कि एक स्वच्छ समाधान है :)/दुकान HDFS में सीएसवी और लकड़ी प्रारूप में एक DataFrame,

val conf = { 
    new SparkConf() 
    .setAppName("Spark-HDFS-Read-Write") 
} 

val sqlContext = new SQLContext(sc) 

val sc = new SparkContext(conf) 

val hdfs = "hdfs:///" 
val df = Seq((1, "Name1")).toDF("id", "name") 

// Writing file in CSV format 
df.write.format("com.databricks.spark.csv").mode("overwrite").save(hdfs + "user/hdfs/employee/details.csv") 

// Writing file in PARQUET format 
df.write.format("parquet").mode("overwrite").save(hdfs + "user/hdfs/employee/details") 

// Reading CSV files from HDFS 
val dfIncsv = sqlContext.read.format("com.databricks.spark.csv").option("inferSchema", "true").load(hdfs + "user/hdfs/employee/details.csv") 

// Reading PQRQUET files from HDFS 
val dfInParquet = sqlContext.read.parquet(hdfs + "user/hdfs/employee/details") 
संबंधित मुद्दे

 संबंधित मुद्दे