নীচে আপনি কয়েকটি সমাধান সন্ধান করতে পারেন। (গ্রুপ বাই, ফোল্ড লেফট, সমষ্টি, স্পার্ক)
val list: List[(String, String)] = List(("a","b"),("c","d"),("a","f"))
গ্রুপ-বাই প্রকরণ
list.groupBy(_._1).map(v => (v._1, v._2.map(_._2)))
বাম প্রকরণ ভাঁজ করুন
list.foldLeft[Map[String, List[String]]](Map())((acc, value) => {
acc.get(value._1).fold(acc ++ Map(value._1 -> List(value._2))){ v =>
acc ++ Map(value._1 -> (value._2 :: v))
}
})
সমষ্টিগত পার্থক্য - বাম ভাঁজ করার অনুরূপ
list.aggregate[Map[String, List[String]]](Map())(
(acc, value) => acc.get(value._1).fold(acc ++ Map(value._1 ->
List(value._2))){ v =>
acc ++ Map(value._1 -> (value._2 :: v))
},
(l, r) => l ++ r
)
স্পার্কের তারতম্য - বড় ডেটা সেটগুলির জন্য (আরডিডি থেকে আরডিডি থেকে একটি সরল মানচিত্রে রূপান্তর)
import org.apache.spark.rdd._
import org.apache.spark.{SparkContext, SparkConf}
val conf: SparkConf = new
SparkConf().setAppName("Spark").setMaster("local")
val sc: SparkContext = new SparkContext (conf)
val rdd: RDD[(String, List[String])] = sc.parallelize(list).combineByKey(
(value: String) => List(value),
(acc: List[String], value) => value :: acc,
(accLeft: List[String], accRight: List[String]) => accLeft ::: accRight
)
rdd.collect().toMap
Map[String, SeqView[String,Seq[_]]]
... এটি উদ্দেশ্যমূলক?