2

私はこれを得た:

val vector: RDD[(String, Array[String])] = [("a", {v1,v2,..}),("b", {u1,u2,..})]

に変換したい:

RDD[(String, String)] = [("a",v1), ("a",v2), ..., ("b",u1), ("b",u2), ...]

を使用してそれを行う方法についてのアイデアflatMap

4

3 に答える 3

4

これ:

vector.flatMap { case (x, arr) => arr.map((x, _)) }

あなたに与えます:

scala> val vector = sc.parallelize(Vector(("a", Array("b", "c")), ("b", Array("d", "f"))))
vector: org.apache.spark.rdd.RDD[(String, Array[String])] =
               ParallelCollectionRDD[3] at parallelize at <console>:27


scala> vector.flatMap { case (x, arr) => arr.map((x, _)) }.collect
res4: Array[(String, String)] = Array((a,b), (a,c), (b,d), (b,f))
于 2016-07-19T15:30:24.987 に答える
2

あなたが言及したように使用する必要があることは間違いありませflatMapんが、さらにscalamapも使用する必要があります。

例えば:

val idToVectorValue: RDD[(String, String ] = vector.flatMap((id,values) => values.map(value => (id, value)))
于 2016-07-19T15:30:26.970 に答える