Spark RDD взять и удалить строки - PullRequest
0 голосов
/ 26 октября 2018

У меня есть СДР 1000 элементов. Я хочу взять из него 100 элементов, а затем удалить эти 100 из исходного СДР. Но я не могу найти способ после нескольких попыток.

var part = dataRDD.take(100)

часть является массивом [String]

Я хочу удалить 100 элементов из 100 dataRDD.

var dataRDD = dataRDD.filter(row => row != part)

Выше не показывается никакой ошибки, но не удаляются все строки. dataRDD по-прежнему имеет те же 1000 строк.

Подскажите, пожалуйста, как получить эту работу.

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Метод "zipWithIndex" может использоваться для разделения rdd:

val zipped = rdd.zipWithIndex()
val first100 = zipped.filter(_._2 < 100).keys
val remaining = zipped.filter(_._2 >= 100).keys
0 голосов
/ 26 октября 2018

Скорее всего, ваш код не работает так, как вы ожидаете, потому что row != part всегда true. != в этом контексте - сравнение ссылок между массивами из Java.

0 голосов
/ 26 октября 2018

Вы можете написать как:

var part = sc.parallelize(dataRDD.take(100))
val result = dataRDD.subtract(part)
result.foreach(x => foreach(x))

печать RDD только для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...