2016-04-13 8 views
5

मैं नीचे एक डेटासेट पढ़ रहा हूं।स्पार्क में कॉलम हेडर असाइन और उपयोग कैसे करें?

f = sc.textFile("s3://test/abc.csv") 

मेरी फ़ाइल में 50+ फ़ील्ड हैं और मैं अपनी फ़ील्ड में बाद में संदर्भित करने के लिए प्रत्येक फ़ील्ड के लिए कॉलम हेडर असाइन करना चाहता हूं।

मैं इसे PySpark में कैसे कर सकता हूं? क्या डेटाफ्रेम रास्ता यहां जाना है?

पीएस - नौसिखिया स्पार्क।

मान लें अपने csv सीमांकक है ',':

+1

_ क्या डेटाफ्रेम रास्ता यहां जाने का तरीका है? _ - हाँ यह है। या 'नामित' अगर आप बहुत सादे पायथन कोड का उपयोग करने की योजना बना रहे हैं। – zero323

+0

डेटाफ्रेम स्कीमा और आरडीडी का संयोजन है। आपके कोड में अभी वैरिएबल "एफ" एक आरडीडी है। इसलिए, यदि आप इसे स्कीमा जोड़ते हैं, तो आपको डेटाफ्रेम मिल जाएगा। फिर इसमें हेडर और कॉलम नाम होंगे। साथ ही, पोस्ट करें कि आप इस डेटा को टेबल के रूप में पंजीकृत कर सकते हैं और इसके शीर्ष पर SQL कर सकते हैं। –

उत्तर

4

यहाँ DataFrame का उपयोग कर स्तंभ नाम जोड़ने का तरीका है।

f = sc.textFile("s3://test/abc.csv") 
data_rdd = f.map(lambda line: [x for x in line.split(',')]) 

मान लीजिए डेटा 3 स्तंभ हैं::

data_rdd.take(1) 
[[u'1.2', u'red', u'55.6']] 

अब, जब DataFrame को यह RDD स्थानांतरित toDF() का उपयोग कर आप स्तंभ नाम निर्दिष्ट कर सकते हैं: के रूप में DataFrame करने के लिए इसे स्थानांतरित करने से पहले इस प्रकार डेटा तैयार

df_withcol = data_rdd.toDF(['height','color','width']) 

df_withcol.printSchema() 

    root 
    |-- height: string (nullable = true) 
    |-- color: string (nullable = true) 
    |-- width: string (nullable = true) 

आप स्तंभ नाम निर्दिष्ट नहीं करते हैं, तो आप डिफ़ॉल्ट स्तंभ नाम '_1' के साथ एक DataFrame मिलता है, '_2', ...:

df_default = data_rdd.toDF() 

df_default.printSchema() 

    root 
    |-- _1: string (nullable = true) 
    |-- _2: string (nullable = true) 
    |-- _3: string (nullable = true) 
2

इस प्रश्न का समाधान वास्तव में स्पार्क के संस्करण पर निर्भर करता है जो आप चल रहे हैं। मान लें कि आप स्पार्क 2.0+ पर हैं, फिर आप CSV को डेटाफ्रेम के रूप में पढ़ सकते हैं और डीडीएफ के साथ कॉलम जोड़ सकते हैं जो आरडीडी को डेटाफ्रेम में बदलने या मौजूदा डेटा फ्रेम में कॉलम जोड़ने के लिए अच्छा है।

filename = "/path/to/file.csv" 
df = spark.read.csv(filename).toDF("col1","col2","col3") 
संबंधित मुद्दे