2
如果我有("a","b","c")
Spark如何按任意數量的鍵組合?
的RDD和密鑰生成器是一樣的東西
def keygen(x:String) = x match {
case "a" => Seq("x","y")
case "b" => Seq("x")
case "c" => Seq()
}
如何獲得的("x"->Seq("a","b"),"y"->Seq("b"))
我的方式的鍵值RDD做到這一點。
val sample = sc.parallelize(Seq("a", "b", "c"))
def keygen(x: String) = x match {
case "a" => Seq("x", "y")
case "b" => Seq("x")
case "c" => Seq()
}
val sampleWithKey = sample.flatMap(x => keygen(x).map(y => (y, x))).groupBy(_._1).mapValues(_.map(_._2))
val result = sampleWithKey.collect()
println("result: ", result.mkString("(", ",", ")"))
得到(x,List(a, b)),(y,List(a))
嗯......你'keygen'產生'SEQ [String]'所以我不認爲你想要一個'RDD',其中'keys'是'String'。另外...你的'RDD'應該是'TypeSafe',所以你不能有一個不一致的類型的'RDD',比如'(「x」 - >(「a」,「b」),「y」 - >(「b」))'''[(String,(String,String)),(String,(String))]' –
@SarveshKumarSingh編輯過的問題。 – Renkai