我正在尝试撤消(展平)在Scala中的RDD上创建的分组,例如:https://backtobazics.com/big-data/spark/apache-spark-groupby-example/
基本上我有一个键-值,其中值是一个列表。我想把它弄平。我想不出如何去做,我以为它一定要放在平面图中,但是我想不出语法。有人可以指出我正确的方向吗?
答案 0 :(得分:2)
您应该提供一些代码来回答您的问题,但这是如何利用groupBy
来使flatMap
变平(我使用的代码段与“ Spark group 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})