map、flatMapRDD异同点总结

val rdd = sparkContext.textFile("src/main/spark_test/data1")
//map 分割和flatMap分割的不同
//map
println("#######################")
rdd.map(_.split(";")).collect().foreach(data => println(data.mkString))
println("#######################")
//flatMap
rdd.flatMap(_.split(";")).collect().foreach(data => println(data.mkString))

/*
* 比较map和flatMap
* flatMap会拆解元素内部包裹的元素,map则是对第一层遇到的元素进行操作,flatMap操作完再进行拆解到第二层粒度
* 注意,flatMap只能扁平化两层的数据
* !!!当不能满足直接扁平化映射的需求,则需要在flatMap中自定义逻辑,将参数按照自己的需求进行转化
* */
println("#######################")
val rdd1 = sparkContext.makeRDD(List("hotpot", 1, List(1, 2, 3)))
println(rdd1.flatMap(
  data => {
    data match {
      case list: List[_] => list
      case int: Int => List(int)
      case string: String => string.toList
    }
  }
).collect().mkString(","))
/*
* flatMap三层嵌套的解析方式
* */
println("#######################")
//解析出的元素还是LIST
val rdd3 = sparkContext.makeRDD(
  List(List(List("lorin", "rainBaby"), List("happy", "sixOne")),List(List("pokey", "danta"), List("paopao", "zaizai")))
)
rdd3.flatMap(list=>list).collect().foreach(println)
println("#######################")
//解析出的元素是LIST中的字符串
rdd3.flatMap(
    _ match {
      case list: List[_] => list.flatMap(list => list)
    }
).collect().foreach(println)

println("#######################")

val rdd5 =sparkContext.makeRDD(List(List("happy",1),"happy2",List(List("happy3","happy5"),"happy4")))
rdd5.flatMap(
  list=>{
    list match {
      case string: String=> List(string)
      case list: List[_]=>list
      }

  }
).collect().foreach(println(_))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值