Spark rdd принимает и удаляет строки

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

var part = dataRDD.take(100)

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

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

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

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

Не могли бы вы посоветовать, как получить эту работу.

Основные преимущества Spark заключаются в создании неизменяемых структур данных. Вы не должны использовать var.

Prashant 26.10.2018 13:49

да. Но мой проект состоит в том, чтобы транслировать RDD по частям. Так что пришлось разделить и RDD.

Ashok KS 26.10.2018 14:54
1
2
3 078
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Ответ принят как подходящий

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

val zipped = rdd.zipWithIndex()
val first100 = zipped.filter(_._2 < 100).keys
val remaining = zipped.filter(_._2 >= 100).keys

Потрясающие. Это было именно то, что я хотел. Большое спасибо.

Ashok KS 26.10.2018 11:10

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

Другие вопросы по теме