2017-06-06 31 views
1

私はこのprbolemを持って、私はRDD[(String,String, List[String])を持っている、と私はRDD[(String,String, String)]を得るために、それを "flatmap" したいと思います:FlatmapのScalaの[文字列、文字列、リストの[文字列]]

例:

val x :RDD[(String,String, List[String]) = 
RDD[(a,b, list[ "ra", "re", "ri"])] 

私は希望のGET:

val result: RDD[(String,String,String)] = 
RDD[(a, b, ra),(a, b, re),(a, b, ri)])] 

答えて

6

使用flatMap

val rdd = sc.parallelize(Seq(("a", "b", List("ra", "re", "ri")))) 
// rdd: org.apache.spark.rdd.RDD[(String, String, List[String])] = ParallelCollectionRDD[7] at parallelize at <console>:28 

rdd.flatMap{ case (x, y, z) => z.map((x, y, _)) }.collect 
// res23: Array[(String, String, String)] = Array((a,b,ra), (a,b,re), (a,b,ri)) 
0

これは `しばらくOP、私は同意しない、ここでの結果の型は` RDD []一覧[(文字列、文字列、文字列)]になり、再び

val rdd = sparkContext.parallelize(Seq(("a", "b", List("ra", "re", "ri")))) 
rdd.flatMap(array => array._3.map(list => (array._1, array._2, list))).foreach(println) 
+0

flatMapを使用してそれを行うための別の方法であります'RDD [(String、String、String)] – GPI

+0

はい、あなたは正しいです@GPI私の答えを更新させてください:)私に知らせてくれてありがとう –