स्काला मानक lib का उपयोग कर, मैं इस तरह somthing कर सकते हैं:स्पार्क में दो अलग-अलग एपीआई क्यों हैं और गुना क्यों हैं?
scala> val scalaList = List(1,2,3)
scalaList: List[Int] = List(1, 2, 3)
scala> scalaList.foldLeft(0)((acc,n)=>acc+n)
res0: Int = 6
कई Ints में से एक इंट बनाना।
और मैं कुछ इस तरह कर सकते हैं:
scala> scalaList.foldLeft("")((acc,n)=>acc+n.toString)
res1: String = 123
कई Ints में से एक स्ट्रिंग बनाना।
तो, फ़ोल्ड लेफ्ट या तो सजातीय या विषम हो सकता है, जो भी हम चाहते हैं, यह एक एपीआई में है।
स्पार्क में रहते हुए, अगर मैं कई Ints में से एक इंट चाहते हैं, मैं यह कर सकता:
scala> val rdd = sc.parallelize(List(1,2,3))
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[1] at parallelize at <console>:12
scala> rdd.fold(0)((acc,n)=>acc+n)
res1: Int = 6
गुना एपीआई foldLeft के समान है, लेकिन यह, केवल सजातीय है एक RDD [इंट] कर सकते हैं केवल फोल्ड के साथ int उत्पादन।
scala> rdd.aggregate("")((acc,n)=>acc+n.toString, (s1,s2)=>s1+s2)
res11: String = 132
यह विषम है, एक RDD [इंट] अब एक स्ट्रिंग उत्पादन कर सकते हैं:
भी चिंगारी में एक कुल एपीआई नहीं है।
तो, स्पार्क में दो अलग-अलग एपीआई के रूप में फोल्ड और कुल क्यों लागू किए गए हैं?
वे फ़ोल्डलिफ्ट की तरह क्यों डिज़ाइन नहीं किए गए हैं जो एकरूप और विषम दोनों हो सकते हैं?
(मैं बहुत स्पार्क के लिए नया हूँ, कृपया मुझे क्षमा करें अगर यह एक मूर्खतापूर्ण सवाल है।)
अधिक सटीक होना, 'fold' स्पार्क में दोनों सहयोगीता _and_ कम्यूटिटी की आवश्यकता होती है जबकि स्कैला और अन्य गैर-वितरित ढांचे में 'गुना' को कम्यूटिटी की आवश्यकता नहीं होती है। स्पार्क दस्तावेज देखें [यहां] (https://spark.apache.org/docs/latest/api/java/org/apache/spark/rdd/RDD.html#fold (टी,% 20scala.Function2)) – FuzzY