Ошибка RDD collect()

Вопрос, который я чувствую, может принести пользу другим.

Если я бегу

val rdd1  = sc.parallelize( List( "a", "b", "c", "d", "e")) 
val rdd1a = rdd1.map(x => (x, 110, 110 - x.toByte ))

rdd1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[55] at parallelize at <console>:44
rdd1a: org.apache.spark.rdd.RDD[(String, Int, Int)] = MapPartitionsRDD[56] at map at <console>:46

оно работает.

Как только я добавлю собирать

val rdd1  = sc.parallelize( List( "a", "b", "c", "d", "e")) 
val rdd1a = rdd1.map(x => (x, 110, 110 - x.toByte )).collect()

это терпит неудачу.

Логика вроде бы ускользает от меня на самом деле. Кто может уточнить? Это СДР так?

1 ответ

Решение

Ошибка здесь

val rdd1a = rdd1.map(x => (x, 110, 110 - x.toByte ))

поскольку x является string и вы пытаетесь изменить его на Byte

что вы должны сделать, это

val rdd1a = rdd1.map(x => (x, 110, 110 - x.toCharArray()(0).toByte ))

Это не удалось здесь

val rdd1a = rdd1.map(x => (x, 110, 110 - x.toByte ))

потому что это ленивая оценка, она не выполняется, collect это действие. После того, как действие выполнено, код также выполняется.

Надеюсь это поможет

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