Пустая коллекция при уменьшении карты в scala

Я обнаружил, что искровое задание завершается с сообщением об ошибке как пустой коллекции.

java.lang.UnsupportedOperationException: empty collection

Я увеличил масштаб до 2 строк, которые вызвали проблему.

sum_attribute1 = inputRDD.map(_.attribute1).reduce(_+_)
sum_attribute2 = inputRDD.map(_.attribute2).reduce(_+_)`

Другие строки, которые делают .map и .distinct.count, подходят. Мне нравится распечатывать inputRDD.map (attribute1) и inputRDD.map (_. Attribute2), чтобы увидеть, что было картой до уменьшения.

Я думал, что могу определить что-то вроде

sum_attribute1 = inputRDD.map(_.attribute1)

но когда я пытался скомпилировать код, он показывает ошибки:

[error]  found   : org.apache.spark.rdd.RDD[Int]
[error]  required: Long
[error] sum_attribute1 = inputRDD.map(_.attribute1)
[error]                              ^

Мой attribute1 был определен как Int, но когда я попытался определить его как Long, у меня возникла еще одна ошибка.

Я иду в правильном направлении? Как я могу распечатать данные после карты и до уменьшения? В чем может быть проблема с пустой коллекцией? Что означает подчеркивание в _.attribute1 и сокращение (_ + _)?

Каковы все варианты использования подчеркивания? Ищите "синтаксис заполнителя".
jwvh 11.04.2018 12:21
0
1
163
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Не думаю, что вы идете в правильном направлении, я бы остановился на следующих элементах:

Я рекомендую вам сначала немного изучить scala. К одному из ваших конкретных вопросов прочтите об использовании _.

Что касается другого вашего вопроса, reduce нельзя использовать в пустой коллекции, я рекомендую вместо этого использовать fold, поскольку он отлично поддерживает пустые коллекции.

Привет, на самом деле я портирую некоторую искровую работу с Oracle BDA на другую платформу, которая использует v3io. В BDA в том же задании используется сокращение без проблемы с пустой коллекцией. Поэтому я хотел увидеть результат карты перед уменьшением с обеих сторон для сравнения. Необходимо подтвердить это, прежде чем я переключусь на использование фолда на моей новой платформе.

user1342124 12.04.2018 04:01

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