感受动作和变换的区别
我们用一个例子来直观感受下动作和变换的区别。
下面的例子首先做一个映射变换,然后返回新纪录的条数。map是一个变换,负责将原RDD的每个记录变换到新的RDD,count是一个动作,负责获取这个RDD的记录总数。
先执行map,你应该看到很迅速干净地返回:
scala> val rdd2=textFile.map(line=>line.length) rdd2: org.apache.spark.rdd.RDD[Int] = MappedRDD[52] ...
再执行count,这会有些不一样:
scala> rdd2.count() ...... res10: Long = 141 .....
当执行map时,我们看到结果很快返回了。但当执行count时,我们可以看到一堆的提示信息,大概的意思就是 和调度器进行了若干沟通才把数据拉回来。
看起来确实这样,变换操作就只是写写剧本,Action才真正开始执行计算任务。
RDD操作分为两种:动作和变换,只有动作才会触发计算!
使用你刚才创建的textFile变量,进行上面的map和reduce操作,感受下map和reduce的区别。