разделить rdd и получить доступ к подгруппе элементов - PullRequest
0 голосов
/ 14 мая 2019

Я хотел бы разделить мой RDD относительно запятых и получить доступ к предопределенному набору элементов. Например, у меня есть RDD как это:

a, b, c, d
e, f, g, h

и мне нужно разделить, затем получить доступ к первому и четвертому элементу в первой строке, а также ко второму и третьему элементу во второй строке, чтобы получить полученную СДР:

a, d
f, g

Я не могу точно написать «1» и «4» в своем коде, поэтому подобное решение не будет работать:

rdd.map{line => val words = line.split(",") (words(0),words(3)) }

Предположим, у меня есть второй RRD с тем же количеством строк, который содержит элементы, которые я хочу получить для каждой строки

1,4
2,3

Есть ли способ получить мои элементы?

1 Ответ

0 голосов
/ 14 мая 2019

Предположим, у меня есть второй RRD с тем же количеством строк, который содержит элементы, которые я хочу получить для каждой строки

1,4
2,3

Есть ли способполучить мои элементы?

Если у вас есть второй RDD, в котором уже есть номера групп, которые вы хотите для каждой строки, вы можете заархивировать их.Из документов Spark:

<U> RDD<scala.Tuple2<T,U>> zip(RDD<U> other, scala.reflect.ClassTag<U> evidence$13)

Архивирует этот RDD с другим, возвращая пары ключ-значение с первым элементом в каждом RDD, вторым элементом в каждом RDD и т. Д.

Итак, в вашем примере a, b, c, d будет в паре ключ-значение с 1,4 и e, f, g, h с 2,3.Так что вы можете сделать что-то вроде:

val groupNumbers = lettersRDD zip numbersRDD

groupnumbers.map{tuple -> 
val numbers: Seq[Int] = // get the numbers from tuple._2
 val words = tuple._1.split(",") (words(numbers.head),words(numbers(1) ) }
}
...