python - सूची की सूची से एकल पंक्ति डेटाफ्रेम बनाएं




apache-spark pyspark (2)

मेरे पास इस डेटा जैसा data = [[1.1, 1.2], [1.3, 1.4], [1.5, 1.6]] मैं एक PySpark डेटाफ्रेम बनाना चाहता हूं

मैं पहले से ही उपयोग करता हूं

dataframe = SQLContext.createDataFrame(data, ['features'])

लेकिन मुझे हमेशा मिलता है

+--------+---+
|features| _2|
+--------+---+
|     1.1|1.2|
|     1.3|1.4|
|     1.5|1.6|
+--------+---+

मैं नीचे जैसा परिणाम कैसे प्राप्त कर सकता हूं?

+----------+
|features  |
+----------+
|[1.1, 1.2]|
|[1.3, 1.4]|
|[1.5, 1.6]|
+----------+

आपको वेक्टर असेंबलर फ़ंक्शन का उपयोग करना चाहिए, आपके कोड से मुझे लगता है कि आप मशीन सीखने के मॉडल को प्रशिक्षित करने के लिए ऐसा कर रहे हैं, और वेक्टर असेंबलर उस मामले के लिए सबसे अच्छा काम करता है। आप पाइपलाइन में कोडांतरक भी जोड़ सकते हैं।

assemble_feature=VectorAssembler(inputCol=data.columns,outputCol='features')
pipeline=Pipeline(stages=[assemble_feature])
pipeline.fit(data).transform(data)

मुझे लगता है कि createDataFrame() एक सूची के रूप में createDataFrame() के तर्क के बारे में सोचना उपयोगी है, जहां सूची में प्रत्येक प्रविष्टि DataFrame में एक पंक्ति से मेल खाती है और ट्यूपल का प्रत्येक तत्व एक स्तंभ से मेल खाता है।

आप सूची में प्रत्येक तत्व को टपल बनाकर अपना वांछित आउटपुट प्राप्त कर सकते हैं:

data = [([1.1, 1.2],), ([1.3, 1.4],), ([1.5, 1.6],)]
dataframe = sqlCtx.createDataFrame(data, ['features'])
dataframe.show()
#+----------+
#|  features|
#+----------+
#|[1.1, 1.2]|
#|[1.3, 1.4]|
#|[1.5, 1.6]|
#+----------+

या अगर स्रोत को बदलना बोझिल है, तो आप समकक्ष रूप से कर सकते हैं:

data = [[1.1, 1.2], [1.3, 1.4], [1.5, 1.6]]
dataframe = sqlCtx.createDataFrame(map(lambda x: (x, ), data), ['features'])
dataframe.show()
#+----------+
#|  features|
#+----------+
#|[1.1, 1.2]|
#|[1.3, 1.4]|
#|[1.5, 1.6]|
#+----------+






apache-spark-sql