Scala standart lib kullanarak, böyle Somthing yapabilirsiniz:Spark'de neden iki farklı API toplanıyor ve katlanıyor?
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
birçok Ints dışında bir Int yapma.
Ve böyle bir şey yapabilirsiniz:
scala> scalaList.foldLeft("")((acc,n)=>acc+n.toString)
res1: String = 123
birçok Ints dışında bir dize yapma.
Yani, foldLeft ister homojen ister heterojen olabilir, hangisini istiyorsak, bir API içinde. olabilir
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
kat API foldLeft benzer, ancak, bir RDD [Uluslararası] sadece homojen geçerli:
Spark iken birçok Ints dışında bir Int istiyorsanız, bunu yapabilirim sadece katlama ile Int üretir. Bir RDD [Int] artık bir dize üretebilir
scala> rdd.aggregate("")((acc,n)=>acc+n.toString, (s1,s2)=>s1+s2)
res11: String = 132
Bu heterojen olduğunu:
çok kıvılcım bir agrega API vardır.
Peki, neden kıvılcım ve toplam Spark'deki iki farklı API olarak uygulanmaktadır?
Neden hem homojen hem de heterojen olabilen foldLeft gibi tasarlanmadılar?
(bu saçma bir soru olup olmadığını Spark için çok yeni, affedersiniz lütfen.) O değerlendirmenin sabit sırasına bağlı değildir, çünkü
daha kesin olmak gerekirse, 'fold' Spark, Scala'da ve diğer dağıtılmamış çerçevelerde 'katlanma' işlevi değişmezlik gerektirmiyorsa, hem de ilişkilendirmeyi _and_ değişkeni gerektirir. Spark belgelerine göz atın [burada] (https://spark.apache.org/docs/latest/api/java/org/apache/spark/rdd/RDD.html#fold (T,% 20scala.Function2)) – FuzzY