Spark转化算子map和flatMap的区别

记录下学习过程

初学spark,之前一直弄不懂map和flatmap的区别

测试文本

text.txt
	hello world
	hello spark
	hello hive

map

	将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
	输入分区与输出分区一对一,即:有多少个输入分区,就有多少个输出分区。
  @Test
  def mapTest(): Unit = {
    val mapRDD: RDD[Array[String]] = sc
      .textFile("src\\main\\resources\\text.txt")
      .map(line => line.split(" "))
    mapRDD.foreach(println)
    //Array(Array(hello, world), Array(hello, spark), Array(hello, hive))
    mapRDD.foreach(elem => {
      for (i <- 0 until  elem.length){
        println(elem(i))
      }
    })
  }
输出结果:
[Ljava.lang.String;@65c908a0
[Ljava.lang.String;@590e109
[Ljava.lang.String;@458800ed
hello
hive
hello
world
hello
spark
	即三个数组对象	
	调用map方法后RDD的返回类型是	RDD[Array[String]],RDD本身是一个集合,
集合里又嵌套了一个Aray数组
	直接foreach输出的就是数组对象
	然后我用最笨的方法直接遍历输出了所有元素

flatMap

	对RDD每个元素转化,然后再扁平化,将所有对象合并成一个对象,会抛弃null值
  @Test
  def flatmapTest() = {
    val flatmapRDD: RDD[String] = sc
      .textFile("src\\main\\resources\\text.txt")
      .flatMap(line => line.split(" "))
    // Array(hello, world, hello, spark, hello, hive)
    flatmapRDD.foreach(println)
  }
输出结果
hello
hello
hive
world
hello
spark
	即一个RDD集合对象,RDD[String]
	再foreach遍历输出
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值