Apache spark RDD collect()失败
我觉得这个问题可能对其他人有益 如果我跑Apache spark RDD collect()失败,apache-spark,collect,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:
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,所以?错误就在这里
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 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
是一个操作。执行操作后,代码也会执行
希望这能有所帮助,因为“map”是一种惰性转换,在调用某个操作(“collect”)之前不会被调用。您的第一个示例没有失败,因为map没有被称为YetUnderstand,但根本原因是?这是因为“map”是一个惰性转换,在调用操作(“collect”)之前不会被调用。您的第一个示例并没有失败,因为map并没有被称为YetUnderstand,但根本原因是?那么这是做什么的呢?x.ToCharray()(0)也就是说。如果您尝试进行ASCII编码,它会转换为Char并转换为ByteSo。这是做什么的?x.ToCharray()(0)也就是说。如果您尝试进行ASCII编码,它会转换为Char并转换为Byte