我觉得一个问题可能会让其他人受益。
如果我跑
''
它有效。
一旦我添加收集
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呢?
答案 0 :(得分:2)
错误在这里
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
是一个动作。执行操作后,代码也会执行。
希望这有帮助