【spark】Spark算子:RDD基本转换操作–map、flagMap、distinct
来源:互联网 发布:中国人口 知乎 编辑:程序博客网 时间:2024/06/05 18:34
- map
将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
输入分区与输出分区一对一,即:有多少个输入分区,就有多少个输出分区。
- hadoop fs -cat /tmp/lxw1234/1.txt
- hello world
- hello spark
- hello hive
- //读取HDFS文件到RDD
- scala> var data = sc.textFile("/tmp/lxw1234/1.txt")
- data: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at :21
- //使用map算子
- scala> var mapresult = data.map(line => line.split("\\s+"))
- mapresult: org.apache.spark.rdd.RDD[Array[String]] = MapPartitionsRDD[2] at map at :23
- //运算map算子结果
- scala> mapresult.collect
- res0: Array[Array[String]] = Array(Array(hello, world), Array(hello, spark), Array(hello, hive))
- flatMap
属于Transformation算子,第一步和map一样,最后将所有的输出分区合并成一个。
- /使用flatMap算子
- scala> var flatmapresult = data.flatMap(line => line.split("\\s+"))
- flatmapresult: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[3] at flatMap at :23
- //运算flagMap算子结果
- scala> flatmapresult.collect
- res1: Array[String] = Array(hello, world, hello, spark, hello, hive)
使用flatMap时候需要注意:
flatMap会将字符串看成是一个字符数组。
看下面的例子:
- scala> data.map(_.toUpperCase).collect
- res32: Array[String] = Array(HELLO WORLD, HELLO SPARK, HELLO HIVE, HI SPARK)
- scala> data.flatMap(_.toUpperCase).collect
- res33: Array[Char] = Array(H, E, L, L, O, , W, O, R, L, D, H, E, L, L, O, , S, P, A, R, K, H, E, L, L, O, , H, I, V, E, H, I, , S, P, A, R, K)
再看:
- scala> data.map(x => x.split("\\s+")).collect
- res34: Array[Array[String]] = Array(Array(hello, world), Array(hello, spark), Array(hello, hive), Array(hi, spark))
- scala> data.flatMap(x => x.split("\\s+")).collect
- res35: Array[String] = Array(hello, world, hello, spark, hello, hive, hi, spark)
这次的结果好像是预期的,最终结果里面并没有把字符串当成字符数组。
这是因为这次map函数中返回的类型为Array[String],并不是String。
flatMap只会将String扁平化成字符数组,并不会把Array[String]也扁平化成字符数组。
参考:
http://alvinalexander.com/scala/collection-scala-flatmap-examples-map-flatten
- distinct
对RDD中的元素进行去重操作。
- scala> data.flatMap(line => line.split("\\s+")).collect
- res61: Array[String] = Array(hello, world, hello, spark, hello, hive, hi, spark)
- scala> data.flatMap(line => line.split("\\s+")).distinct.collect
- res62: Array[String] = Array(hive, hello, world, spark, hi)
如果觉得本博客对您有帮助,请 赞助作者 。
转载请注明:lxw的大数据田地 » Spark算子:RDD基本转换操作(1)–map、flagMap、distinct
阅读全文
0 0
- 【spark】Spark算子:RDD基本转换操作–map、flagMap、distinct
- Spark算子:RDD基本转换操作(1)–map、flagMap、distinct
- Spark算子:RDD基本转换操作(1)–map、flagMap、distinct
- Spark算子:RDD基本转换操作(1)–map、flagMap、distinct
- Spark算子:RDD基本转换操作(1)–map、flagMap、distinct
- Spark算子:RDD基本转换操作(1)–map、flagMap、distinct
- RDD基本转换操作(1)–map、flagMap、distinct
- 3.2 Spark RDD 基本转换操作1-map、flatMap、distinct
- Spark算子:RDD基本转换操作(5)–mapPartitions、
- Spark算子:RDD基本转换操作(2)–coalesce、repartition
- Spark算子:RDD基本转换操作(6)–zip、zipPartitions
- Spark算子:RDD基本转换操作(5)–mapPartitions、mapPartitionsWithIndex
- Spark算子:RDD基本转换操作(7)–zipWithIndex、zipWithUniqueId
- Spark算子:RDD基本转换操作(6)–zip、zipPartitions
- Spark算子:RDD基本转换操作(5)–mapPartitions、mapPartitionsWithIndex
- Spark算子:RDD基本转换操作(3)–randomSplit、glom
- Spark算子:RDD基本转换操作(2)–coalesce、repartition
- Spark算子:RDD基本转换操作(5)–mapPartitions/mapPartitionsWithIndex
- hightcharts图表简单使用
- Android SurfaceFlinger 学习之路(四)----SurfaceFlinger服务的启动与连接过程
- Python 框架之Flask初步了解
- Python规范
- JS里的与或非运算
- 【spark】Spark算子:RDD基本转换操作–map、flagMap、distinct
- 仿支付宝口碑按钮动画
- 没有关联的多表查询
- java 反射学习
- Android自定义SeekBar
- 【漏洞公告】FFmpeg本地文件任意读取漏洞
- 青蛙跳台阶
- Java 关于进行文件加密
- flex 布局