一个我觉得可能会让别人受益的问题。
如果我运行
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它起作用了。
一旦我添加了collect
val rdd1 = sc.parallelize( List( "a", "b", "c", "d", "e"))
val rdd1a = rdd1.map(x => (x, 110, 110 - x.toByte )).collect()它失败了。
我真的有点摸不着头脑。谁能澄清?这是一个RDD,所以呢?
发布于 2017-08-09 23:23:00
错误在这里
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是一个动作。在执行操作之后,代码也会被执行。
希望这能有所帮助
https://stackoverflow.com/questions/45594587
复制相似问题