【发布时间】:2017-08-09 15:15:39
【问题描述】:
我觉得可能对其他人有益的问题。
如果我跑步
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吗?
【问题讨论】:
-
那是因为“map”是一个惰性转换,直到调用一个动作(“collect”)才会被调用。你的第一个例子没有失败,因为地图还没有被调用
-
明白,但根本原因是?
标签: apache-spark collect