7

मेरे पास स्पार्क में डेटाफ्रेम है जिसमें स्तंभों में से एक में एक सरणी है.अब, मैंने एक अलग यूडीएफ लिखा है जो परिवर्तित करता है केवल सरणी के साथ एक और सरणी में सरणी।स्पार्क त्रुटि: क्लासडिक्ट के निर्माण के लिए अपेक्षित शून्य तर्क (numpy.core.multiarray._reconstruct के लिए)

पूर्व: नीचे दिए गए उदाहरण देखें [24,23,27,23][24, 23, 27] कोड परिवर्तित हो जाना चाहिए:

def uniq_array(col_array): 
    x = np.unique(col_array) 
    return x 
uniq_array_udf = udf(uniq_array,ArrayType(IntegerType())) 

Df3 = Df2.withColumn("age_array_unique",uniq_array_udf(Df2.age_array)) 

उपरोक्त कोड में, Df2.age_array वह सरणी है जिस पर मैं एक अलग कॉलम "age_array_unique" प्राप्त करने के लिए यूडीएफ लागू कर रहा हूं जिसमें सरणी में केवल अद्वितीय मान होना चाहिए।

net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict (for numpy.core.multiarray._reconstruct)

किसी को भी मुझे पता है क्यों यह हो रहा है तो कृपया कर सकते हैं:

हालांकि, जैसे ही मैं आदेश Df3.show() चलाने के रूप में, मैं त्रुटि मिलती है?

धन्यवाद!

उत्तर

13

समस्या का स्रोत यह है कि यूडीएफ से लौटाई गई वस्तु घोषित प्रकार के अनुरूप नहीं है। np.unique न केवल numpy.ndarray लौटाता है बल्कि DataFrame API के साथ संख्या NumPy प्रकार which are not compatible पर भी परिवर्तित करता है।

udf(lambda xs: list(OrderedDict((x, None) for x in xs)), 
    ArrayType(IntegerType())) 

बजाय

udf(lambda x: list(set(x)), ArrayType(IntegerType())) 

या इस (आदेश रखने के लिए): आप कुछ इस तरह की कोशिश कर सकते हैं।

तुम सच में np.unique आप उत्पादन कन्वर्ट करना होगा चाहते हैं:

udf(lambda x: np.unique(x).tolist(), ArrayType(IntegerType())) 
+1

लेखन त्रुटि है? "लेकिन संख्यात्मक को इसी NumPy प्रकारों में भी परिवर्तित करता है जो संगत नहीं हैं" –

संबंधित मुद्दे