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 ))
因为 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
是一个动作。执行操作后,代码也会执行。
希望对您有所帮助
一个我觉得可能对别人有帮助的问题
如果我运行
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 ))
因为 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
是一个动作。执行操作后,代码也会执行。
希望对您有所帮助