के अंदर संग्रह संशोधित करें मैं आरडीडी के तत्वों को पुन: सक्रिय करते समय मानचित्र में तत्व जोड़ने की कोशिश कर रहा हूं। मुझे कोई त्रुटि नहीं मिल रही है, लेकिन संशोधन नहीं हो रहे हैं।स्पार्क आरडीडी फोरैच
यह सब ठीक काम करता है सीधे जोड़ने या अन्य संग्रह पुनरावृत्ति:
scala> val myMap = new collection.mutable.HashMap[String,String]
myMap: scala.collection.mutable.HashMap[String,String] = Map()
scala> myMap("test1")="test1"
scala> myMap
res44: scala.collection.mutable.HashMap[String,String] = Map(test1 -> test1)
scala> List("test2", "test3").foreach(w => myMap(w) = w)
scala> myMap
res46: scala.collection.mutable.HashMap[String,String] = Map(test2 -> test2, test1 -> test1, test3 -> test3)
लेकिन जब मैं एक RDD से भी ऐसा ही करने की कोशिश: मैं की सामग्री मुद्रण की कोशिश की है
scala> val fromFile = sc.textFile("tests.txt")
...
scala> fromFile.take(3)
...
res48: Array[String] = Array(test4, test5, test6)
scala> fromFile.foreach(w => myMap(w) = w)
scala> myMap
res50: scala.collection.mutable.HashMap[String,String] = Map(test2 -> test2, test1 -> test1, test3 -> test3)
नक्शा यह सुनिश्चित करने के लिए था कि चर वैसा ही है, और यह सही ढंग से प्रिंट करता है:
fromFile.foreach(w => println(myMap("test1")))
...
test1
test1
test1
...
मैंने फ़ोरैच कोड के अंदर मानचित्र के संशोधित तत्व को भी मुद्रित किया है और यह संशोधित के रूप में प्रिंट करता है, लेकिन जब ऑपरेशन पूरा हो जाता है, तो नक्शा असम्बद्ध लगता है।
scala> fromFile.foreach({w => myMap(w) = w; println(myMap(w))})
...
test4
test5
test6
...
scala> myMap
res55: scala.collection.mutable.HashMap[String,String] = Map(test2 -> test2, test1 -> test1, test3 -> test3)
एक सरणी (इकट्ठा) को RDD परिवर्तित भी ठीक काम करता है:
fromFile.collect.foreach(w => myMap(w) = w)
scala> myMap
res89: scala.collection.mutable.HashMap[String,String] = Map(test2 -> test2, test5 -> test5, test1 -> test1, test4 -> test4, test6 -> test6, test3 -> test3)
यह एक संदर्भ समस्या है? क्या मैं उस डेटा की एक प्रति एक्सेस कर रहा हूं जिसे कहीं और संशोधित किया जा रहा है?
यह वास्तव में मेरे प्रश्न का उत्तर देता है, और जो मैं पूरा करने की कोशिश कर रहा था उसके बारे में चिंता न करें, मुझे अभी यह एक दिलचस्प मामला मिला है जिसके लिए मुझे कोई स्पष्टीकरण नहीं मिला है। मैं अब कर रहा हूँ, धन्यवाद! – palako
हां, जैसा कि डैनियल बताता है कि आप राज्य को विचलित नहीं कर सकते हैं, palako कार्यात्मक प्रोग्रामिंग के बिंदु गुम है। आप को राज्य को उत्परिवर्तित नहीं करना चाहिए, तब आप parallerize नहीं कर सकते हैं। इस तरह से कोड को डिज़ाइन करके कि आप राज्य को म्यूटेट नहीं करते हैं, आपका कोड मुफ्त में पैरालेरिज कर सकता है और आप क्लस्टर में वितरित करने के लिए स्पार्क और स्काल्डिंग जैसे ढांचे का उपयोग कर सकते हैं। – samthebest
@Daniel क्या इसके लिए कोई कामकाज है? –