Ошибка 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
это действие. После того, как действие выполнено, код также выполняется.
Надеюсь это поможет