Spark Scala - Получить столбец набора данных и преобразовать в Seq - PullRequest
0 голосов
/ 27 июня 2019

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 27 июня 2019
.toLocalIterator().map(...).forEach(...add to Seq)

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

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

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

Этот метод уменьшит размер СДР(и его разделы) перед отправкой данных драйверу.Если это приводит к тому, что драйверу не хватает памяти, тогда единственным вариантом является увеличение памяти драйвера.

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

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

...