2015-02-10 9 views
6

में अपाचे स्पार्क mllib मॉडल सहेजें I स्पार्क में एक फ़ाइल में एक फिट मॉडल को सहेजने की कोशिश कर रहा है। मेरे पास स्पार्क क्लस्टर है जो एक रैंडमॉर्स्ट मॉडल को प्रशिक्षित करता है। मैं किसी अन्य मशीन पर फिट मॉडल को सहेजना और पुन: उपयोग करना चाहता हूं। मैंने वेब पर कुछ पोस्ट पढ़ी हैं जो जावा क्रमबद्ध करने की सिफारिश करती हैं। मैं अजगर में बराबर कर रहा हूं लेकिन यह काम नहीं करता है। चाल क्या है?पाइथन

TypeError: can't pickle lock objects 

मैं अपाचे स्पार्क 1.2.0 का उपयोग कर रहा:

model = RandomForest.trainRegressor(trainingData, categoricalFeaturesInfo={}, 
            numTrees=nb_tree,featureSubsetStrategy="auto", 
            impurity='variance', maxDepth=depth) 
output = open('model.ml', 'wb') 
pickle.dump(model,output) 

मैं इस त्रुटि हो रही है।

+0

हाय, स्पार्क में \ लोड मॉडल को सहेजने का सही तरीका दिखता है मॉडल के लिए .save() और .load() विधियों का उपयोग कर रहा है (कम से कम स्पार्क 1.3.0 में)। लेकिन मुझे इस दृष्टिकोण के साथ भी समस्याएं मिलीं :(मेरी समस्या यहां वर्णित है [स्पार्क \ PySpark में \ लोड मॉडल को सहेजने का सही तरीका क्या है] (http://stackoverflow.com/questions/29255145/what-is-the- सही तरह से करने के लिए बचाने के लिए लोड-मॉडल-इन-चिंगारी pyspark) – artemdevel

उत्तर

0

आप स्रोत कोड को देखो, तो आप देखेंगे कि TreeEnsembleModel जो बारी में, JavaSaveable वर्ग कि save() विधि को लागू करता है से विरासत तो आप नीचे दिए गए उदाहरण में की तरह अपने मॉडल को बचा सकता है से RandomForestModel संभालते हैं:

model.save([spark_context], [file_path]) 

तो का उपयोग करके file_path में model को बचाएगा। आप ऐसा करने के लिए पाइथन नाटिवले अचार का उपयोग नहीं कर सकते (कम से कम अब तक)। यदि आप वास्तव में ऐसा करना चाहते हैं, तो आपको मैन्युअल रूप से __getstate__ या __setstate__ विधियों को लागू करने की आवश्यकता होगी। अधिक जानकारी के लिए this pickle documentation देखें।