说明
本片简单介绍一下 Spark Transformation 以及一些常用的 Transformation,由于刚开始接触,内容较少,后续持续完善。
参考资料:
- 慕课网视频: http://www.imooc.com/video/14397/0
- 知乎讨论(flatMap 与 Map)https://www.zhihu.com/question/34548588?sort=created
Transformation 简介
Transformation 属于 Spark RDD 的常用基本操作中的一类,可以理解为其他语言中的函数或方法,其作用是:基于一个RDD,根据一定的规则,构建一个新的RDD。
BASE_RDD_OBJ ===Transformation===> NEW_RDD_OBJ
Input ===Method===> Output
常用Transformation介绍
map
- 名称: map
- 作用:对RDD中的每个元素,运行指定规则进行计算,计算结果为元素,并返回结果集。
- 实例:
val lines = sc.parallelize(Array("hello","spark","hello","world","!"))
val lines_map = lines.map(word=>(word,1))
lines_map.foreach(println)
# 返回结果为
(hello,1)
(spark,1)
(hello,1)
(world,1)
(!,1)
filter
- 名称: filter
- 作用:过滤RDD中的元素,返回符合指定规则的元素集。
- 实例:
val lines = sc.parallelize(Array("hello","spark","hello","world","!"))
val lines_filter = lines.filter(word=>word.contains("r"))
lines_filter.foreach(println)
# 返回结果为
spark
world
flatMap
- 名称: flatMap
- 作用:对RDD中的每个元素,运行指定规则进行计算,计算结果为集合,并将每个元素的结果集合并为一个集合后输出为新的RDD。
- 实例:
# =================== hello.txt ===========================
# Hello world
# Hello spark
# some world
val input = sc.textFile("hello.txt")
val input_flatmap = input.flatMap(line=>line.split(" "))
input_flatmap.foreach(println)
# 返回结果为
Hello
world
Hello
spark
some
world
distinct
- 名称: distinct
- 作用: 将RDD中重复的元素保留一份,即去重。
- 实例:
val rdd1 = sc.parallelize(Array("coffee","coffee","panda","monkey","tea"))
val rdd_distinct = rdd1.distinct()
rdd_distinct.foreach(println)
# 返回结果为
monkey
coffee
panda
tea
union
- 名称: union
- 作用:将RDD与参数中的RDD进行元素合并。
- 实例:
val rdd1 = sc.parallelize(Array("coffee","coffee","panda","monkey","tea"))
val rdd2 = sc.parallelize(Array("coffee","monkey","kitty"))
val rdd_union = rdd1.union(rdd2)
rdd_union.foreach(println)
# 返回结果为
coffee
coffee
panda
monkey
tea
coffee
monkey
kitty
intersection
- 名称: intersection
- 作用: 与参数中的RDD进行比较,进行相交运算,返回两个RDD中共有的元素。
- 实例:
val rdd1 = sc.parallelize(Array("coffee","coffee","panda","monkey","tea"))
val rdd2 = sc.parallelize(Array("coffee","monkey","kitty"))
val rdd_intersection = rdd1.intersection(rdd2)
rdd_intersection.foreach(println)
# 返回结果为
monkey
coffee
subtract
- 名称: subtract
- 作用: 从RDD中剔除参数RDD中所包含的元素,并返回。
- 实例:
val rdd1 = sc.parallelize(Array("coffee","coffee","panda","monkey","tea"))
val rdd2 = sc.parallelize(Array("coffee","monkey","kitty"))
val rdd_sub = rdd1.subtract(rdd2)
rdd_sub.foreach(println)
# 返回结果为
tea
panda