RDD collect()失败

时间:2017-08-09 15:15:40

标签: apache-spark 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

失败了。

逻辑真的逃脱了我。谁可以澄清?这是一个RDD呢?

1 个答案:

答案 0 :(得分:2)

错误在这里

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

由于xstring而你正试图将其更改为Byte

你应该做的是

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

这并没有在这里失败

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

因为这是一个懒惰的评估,它没有被执行,collect是一个动作。执行操作后,代码也会执行。

希望这有帮助