RDD 收集()失败

RDD collect() failure

一个我觉得可能对别人有帮助的问题

如果我运行

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()

失败了。

我真的有点不懂逻辑。谁能说清楚?那么它是一个 RDD 吗?

错误在这里

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是一个动作。执行操作后,代码也会执行。

希望对您有所帮助