Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark RDD collect()失败_Apache Spark_Collect - Fatal编程技术网

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