2016-01-25 16 views
5

का उपयोग कर tuples की सूची से डेटाफ्रेम बनाएं, मैं सरल-बिक्री बल पैकेज का उपयोग करके एसएफडीसी से निकाले गए डेटा के साथ काम कर रहा हूं। मैं स्क्रिप्टिंग और स्पार्क 1.5.2 के लिए पायथन 3 का उपयोग कर रहा हूं।pyspark

मैं निम्न डेटा युक्त एक RDD बनाया: RDD में

[('Id', 'a0w1a0000003xB1A'), ('PackSize', 1.0), ('Name', 'A')] 
[('Id', 'a0w1a0000003xAAI'), ('PackSize', 1.0), ('Name', 'B')] 
[('Id', 'a0w1a00000xB3AAI'), ('PackSize', 30.0), ('Name', 'C')] 
... 

इस डेटा है कहा जाता v_rdd

मेरे स्कीमा इस तरह दिखता है:

StructType(List(StructField(Id,StringType,true),StructField(PackSize,StringType,true),StructField(Name,StringType,true))) 

मैं DataFrame बनाने के लिए कोशिश कर रहा हूँ इस आरडीडी में से:

sqlDataFrame = sqlContext.createDataFrame(v_rdd, schema) 

मैं अपने DataFrame प्रिंट:

sqlDataFrame.printSchema() 

और निम्नलिखित मिलती है:

+--------------------+--------------------+--------------------+ 
|     Id| PackSize|       Name| 
+--------------------+--------------------+--------------------+ 
|[Ljava.lang.Objec...|[Ljava.lang.Objec...|[Ljava.lang.Objec...| 
|[Ljava.lang.Objec...|[Ljava.lang.Objec...|[Ljava.lang.Objec...| 
|[Ljava.lang.Objec...|[Ljava.lang.Objec...|[Ljava.lang.Objec...| 

मैं, वास्तविक डेटा देखने की उम्मीद कर रहा हूँ इस तरह:

+------------------+------------------+--------------------+ 
|    Id|PackSize|       Name| 
+------------------+------------------+--------------------+ 
|a0w1a0000003xB1A |    1.0|  A   | 
|a0w1a0000003xAAI |    1.0|  B   | 
|a0w1a00000xB3AAI |    30.0|  C   | 

आप कृपया मुझे पहचान मदद कर सकते हैं मैं यहाँ क्या गलत कर रहा हूँ।

मेरी पायथन लिपि लंबी है, मुझे यकीन नहीं है कि लोगों के माध्यम से इसे छोड़ना सुविधाजनक होगा, इसलिए मैंने केवल उन हिस्सों को पोस्ट किया जिनके साथ मुझे समस्या है।

अग्रिम में एक टन धन्यवाद!

उत्तर

12

अरे अगली बार आप एक कामकाजी उदाहरण प्रदान कर सकते हैं। यह आसान होगा।

आपका आरडीडी प्रस्तुत करने का तरीका मूल रूप से डेटाफ्रेम बनाने के लिए अजीब है। स्पार्क दस्तावेज़ीकरण के अनुसार आप डीएफ बनाते हैं।

>>> l = [('Alice', 1)] 
>>> sqlContext.createDataFrame(l).collect() 
[Row(_1=u'Alice', _2=1)] 
>>> sqlContext.createDataFrame(l, ['name', 'age']).collect() 
[Row(name=u'Alice', age=1)] 

तो अपने उदाहरण यदि आप इस तरह की तरह अपने वांछित आउटपुट बना सकते हैं के विषय में:

# Your data at the moment 
data = sc.parallelize([ 
[('Id', 'a0w1a0000003xB1A'), ('PackSize', 1.0), ('Name', 'A')], 
[('Id', 'a0w1a0000003xAAI'), ('PackSize', 1.0), ('Name', 'B')], 
[('Id', 'a0w1a00000xB3AAI'), ('PackSize', 30.0), ('Name', 'C')] 
    ]) 
# Convert to tuple 
data_converted = data.map(lambda x: (x[0][1], x[1][1], x[2][1])) 

# Define schema 
schema = StructType([ 
    StructField("Id", StringType(), True), 
    StructField("Packsize", StringType(), True), 
    StructField("Name", StringType(), True) 
]) 

# Create dataframe 
DF = sqlContext.createDataFrame(data_converted, schema) 

# Output 
DF.show() 
+----------------+--------+----+ 
|    Id|Packsize|Name| 
+----------------+--------+----+ 
|a0w1a0000003xB1A|  1.0| A| 
|a0w1a0000003xAAI|  1.0| B| 
|a0w1a00000xB3AAI| 30.0| C| 
+----------------+--------+----+ 

आशा इस मदद करता है