Spark: Преобразуване на RDD[(Long, Array[Double])] в RDD[(Long, Long, Double)]

Имам RDD с всеки запис на формата (Long, Array[Double]). Например:

    val A = sc.parallelize( [(0, [5.0, 8.3]), (1, [4.2, 1.2])] )

Искам да трансформирам A във формата:

    [(0, 0, 5.0), (0, 1, 8.3), (1, 0, 4.2), (1, 1, 1.2)],

където вторият елемент в кортежа е индексът на стойността от масива.


person jtitusj    schedule 16.12.2015    source източник


Отговори (2)


Опитайте тази:

A.flatMap { case (first, dbls) => dbls.zipWithIndex.map { case (dbl, ix) => (first, ix.toLong, dbl) } }
person Shadowlands    schedule 16.12.2015

Можете да го направите по следния начин:

A.flatMap {case (v, arr) => arr.zipWithIndex.map {case (a, i) => (v, i, a)}}
person Nyavro    schedule 16.12.2015