मुझे एक पिसपार्क डेटाफ्रेम में एक से अधिक स्तंभों को पिवॉट करने की आवश्यकता है। नमूना dataframe,पिवोट एकाधिक कॉलम - pyspark
>>> d = [(100,1,23,10),(100,2,45,11),(100,3,67,12),(100,4,78,13),(101,1,23,10),(101,2,45,13),(101,3,67,14),(101,4,78,15),(102,1,23,10),(102,2,45,11),(102,3,67,16),(102,4,78,18)]
>>> mydf = spark.createDataFrame(d,['id','day','price','units'])
>>> mydf.show()
+---+---+-----+-----+
| id|day|price|units|
+---+---+-----+-----+
|100| 1| 23| 10|
|100| 2| 45| 11|
|100| 3| 67| 12|
|100| 4| 78| 13|
|101| 1| 23| 10|
|101| 2| 45| 13|
|101| 3| 67| 14|
|101| 4| 78| 15|
|102| 1| 23| 10|
|102| 2| 45| 11|
|102| 3| 67| 16|
|102| 4| 78| 18|
+---+---+-----+-----+
अब, अगर मैं दिन के आधार पर प्रत्येक आईडी के लिए एक पंक्ति में मूल्य स्तंभ प्राप्त करने की आवश्यकता है, तो मैं धुरी विधि का उपयोग कर सकते हैं, के रूप में
>>> pvtdf = mydf.withColumn('combcol',F.concat(F.lit('price_'),mydf['day'])).groupby('id').pivot('combcol').agg(F.first('price'))
>>> pvtdf.show()
+---+-------+-------+-------+-------+
| id|price_1|price_2|price_3|price_4|
+---+-------+-------+-------+-------+
|100| 23| 45| 67| 78|
|101| 23| 45| 67| 78|
|102| 23| 45| 67| 78|
+---+-------+-------+-------+-------+
इसलिए जब मैं इकाइयों स्तंभ की जरूरत है साथ ही कीमत के रूप में स्थानांतरित करने के लिए, या तो मैं इकाइयों के लिए ऊपर के रूप में एक और dataframe बनाने के लिए और फिर दोनों id.But, का उपयोग कर जब मैं इस तरह के रूप में अधिक कॉलम में शामिल होने के मिल गया, मैं यह करने के लिए एक समारोह, की कोशिश की
>>> def pivot_udf(df,*cols):
... mydf = df.select('id').drop_duplicates()
... for c in cols:
... mydf = mydf.join(df.withColumn('combcol',F.concat(F.lit('{}_'.format(c)),df['day'])).groupby('id').pivot('combcol').agg(F.first(c)),'id')
... return mydf
...
>>> pivot_udf(mydf,'price','units').show()
+---+-------+-------+-------+-------+-------+-------+-------+-------+
| id|price_1|price_2|price_3|price_4|units_1|units_2|units_3|units_4|
+---+-------+-------+-------+-------+-------+-------+-------+-------+
|100| 23| 45| 67| 78| 10| 11| 12| 13|
|101| 23| 45| 67| 78| 10| 13| 14| 15|
|102| 23| 45| 67| 78| 10| 11| 16| 18|
+---+-------+-------+-------+-------+-------+-------+-------+-------+
पर सुझावों की आवश्यकता है, अगर ऐसा करने का अच्छा अभ्यास है और यदि ऐसा करने का कोई और बेहतर तरीका है। अग्रिम में धन्यवाद!
कृपया इस लिंक का संदर्भ लें, मुझे आशा है कि इससे मदद मिलेगी !! [Https://stackoverflow.com/questions/37486910/pivot-string-column-on-pyspark-dataframe][1] –