Scala Spark обратная группировка groupBy - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь обратить вспять (сгладить) группировку, созданную на СДР в Scala, например: https://backtobazics.com/big-data/spark/apache-spark-groupby-example/

По сути, у меня есть ключ-значение, где значение представляет собой список,Я хочу сгладить это.Я не могу понять, как это сделать, я думаю, что это должно как-то лежать в плоской карте, но я не могу понять синтаксис.Кто-нибудь может указать мне правильное направление, пожалуйста?

1 Ответ

2 голосов
/ 24 июня 2019

Вы должны предоставить некоторый код, чтобы ответить на ваш вопрос, но вот как вы можете сгладить groupBy, используя flatMap (я использую фрагмент кода, похожий на «Пример Spark groupBy с использованием Scala»).На данный момент, я предполагаю, что вы работаете с RDD строк.

val v = Array("foo", "bar", "foobarz")
val rdd: org.apache.spark.rdd.RDD[String] = sc.parallelize(v)
val kvRDD: org.apache.spark.rdd.RDD[(String, Iterable[String])] = rdd.groupBy(x => x) // your group by function goes here
// if you explicitly want to keep the key and generate an RDD of tuples
val pairRDD: org.apache.spark.rdd.RDD[(String, String)] = kvRDD.flatMap({ case (k: String, v: Iterable[String]) => v.map(i => (k, i))})
// or if you just want to undo the grouping without preserving the key
val origRDD: org.apache.spark.rdd.RDD[String] = kvRDD.flatMap({ case (_: String, v: Iterable[String]) => v})
...