में एक dict से एक पंक्ति का निर्माण करना मैं pySpark 1.6.1 में गतिशील रूप से एक पंक्ति बनाने की कोशिश कर रहा हूं, फिर इसे डेटाफ्रेम में बनाएं। सामान्य विचार describe
के परिणामों को विस्तारित करना है, उदाहरण के लिए, स्काई और कुर्टोसिस। यहाँ मैं क्या सोचा काम करना चाहिए है:pySpark
from pyspark.sql import Row
row_dict = {'C0': -1.1990072635132698,
'C3': 0.12605772684660232,
'C4': 0.5760856026559944,
'C5': 0.1951877800894315,
'C6': 24.72378589441825,
'summary': 'kurtosis'}
new_row = Row(row_dict)
लेकिन यह रिटर्न TypeError: sequence item 0: expected string, dict found
जो एक काफी स्पष्ट त्रुटि है। तब मैंने पाया कि अगर मैं पंक्ति में फ़ील्ड पहले परिभाषित, मैं एक dict इस्तेमाल कर सकते हैं:
r = Row('summary', 'C0', 'C3', 'C4', 'C5', 'C6')
r(row_dict)
> Row(summary={'summary': 'kurtosis', 'C3': 0.12605772684660232, 'C0': -1.1990072635132698, 'C6': 24.72378589441825, 'C5': 0.1951877800894315, 'C4': 0.5760856026559944})
कौन सा एक ठीक कदम हो सकता है, सिवाय इसके कि इसे तरह मैं गतिशील में फ़ील्ड को निर्दिष्ट कर सकते हैं नहीं लगता है। मुझे अज्ञात नामों के साथ अज्ञात संख्या में पंक्तियों के लिए काम करने की आवश्यकता है। प्रलेखन के अनुसार आप वास्तव में अन्य तरीके से जा सकते हैं:
>>> Row(name="Alice", age=11).asDict() == {'name': 'Alice', 'age': 11}
True
तो ऐसा लगता है कि मुझे ऐसा करने में सक्षम होना चाहिए। यह भी प्रतीत होता है कि पुरानी संस्करणों से कुछ बहिष्कृत विशेषताएं हो सकती हैं जो इसे अनुमति देती हैं, उदाहरण के लिए here। क्या कोई और वर्तमान बराबर है जो मुझे याद आ रहा है?
क्या यह पायथन के विशिष्ट संस्करण से मान्य है या यह एक सामान्य नियम है? कारण मैं पूछ रहा हूं कि आपके [नवीनतम संपादन] (https://stackoverflow.com/posts/38253641/revisions) के कारण है। – eliasah
@eliasah चूंकि स्पार्क हमेशा आंतरिक रूप से सॉर्ट करेगा, इससे कोई फर्क नहीं पड़ता कि हम इससे पहले क्या करते हैं। और जेआईआरए चर्चा को तब तक नहीं बदला जाएगा जब तक स्पार्क पाइथन <3.6 (जल्द ही कभी नहीं) के लिए समर्थन छोड़ देता है। 'ऑर्डर्ड डिक्ट' थोड़ा भ्रामक था, इसलिए मैंने इसे हटा दिया। – zero323
ठीक है धन्यवाद! वह मेरे भ्रम की उत्पत्ति थी। – eliasah