Spark Scala - Получить столбец набора данных и преобразовать в Seq

У меня есть набор данных

case class MyDS ( id: Int, name: String )

Я хочу получить все имена в последовательности без использования команды collect.

Я просмотрел различные посты, и единственное решение, которое я нашел, было с коллекцией. Есть ли лучший способ сделать это без использования collect

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

ds.collect().map(x => x.name)

Я новичок в Scala, и поэтому некоторые могут увидеть этот вопрос глупый, но был бы очень признателен, если бы кто-то мог поделиться этим, не голосуя по этому вопросу

0
задан Ankit 26 June 2019 в 23:47
поделиться

1 ответ

.toLocalIterator().map(...).forEach(...add to Seq)

Это обработает разделы 'по одному' на драйвере (по сравнению с размещением всего RDD в память драйвера). Память, требуемая на драйвере, равна размеру самого большого раздела.

Тест, если Seq впишется в память драйвера:

.map(x => x.name).collect().toSeq()

Этот метод уменьшит размер RDD (и его разделы) прежде, чем отправить данные на драйвер. Если это заставляет драйвер исчерпывать память тогда, единственная опция состоит в том, чтобы увеличить память драйвера.

Примечания здесь:

https://spark.apache.org/docs/2.2.0/api/java/org/apache/spark/rdd/RDD.html#collect https://spark.apache.org/docs/2.2.0/api/java/org/apache/spark/rdd/RDD.html#toLocalIterator

0
ответ дан AssHat_ 26 June 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: