zoukankan      html  css  js  c++  java
  • spark flatMap

    flatMap 算子在word count中经常使用,是一个transformation 算子

    1、如果使用map

    val arr=sc.parallelize(Array(("A",1),("B",2),("C",3)))
    arr.map(x=>(x._1+x._2)).collect.foreach(println)

    输出结果:

    A1
    B2
    C3

    如果使用flatMap(打平作用的对象是一个字符串)

    val arr=sc.parallelize(Array(("A",1),("B",2),("C",3)))
    arr.flatMap(x=>(x._1+x._2)).collect.foreach(println)

    输出结果

    A
    1
    B
    2
    C
    3

    2、flatMap使用2: (flat的作用对象是一个list)

    val data2=sc.parallelize(List(List("A1 A2"),List("B2 B3")))
     data2.map(x=>x).collect.foreach(println(_))

    结果

    List(A1 A2)
    List(B2 B3)

    flatMap

    val data2=sc.parallelize(List(List("A1 A2"),List("B2 B3")))
    data2.flatMap(x=>x).collect.foreach(println(_))

    实际案例

    字符串中如何统计相邻字符对出现的次数。意思就是如果有A;B;C;D;B;C字符串,则(A,B),(C,D),(D,B)相邻字符对出现一次,(B,C)出现两次。 

    数据如下:

    A;B;C;D;B;D;C
    B;D;A;E;D;C
    A;B

    代码

    data.map(x=>x.split(";")).flatMap(x=>{
          for(i<- 0.until(x.length-1))
            yield (x(i)+","+x(i+1),1)
        }).reduceByKey(_+_).collect().foreach(println(_))

    结果:

    (A,E,1)
    (E,D,1)
    (D,A,1)
    (C,D,1)
    (B,C,1)
    (B,D,2)
    (D,C,2)
    (D,B,1)
    (A,B,2)
  • 相关阅读:
    Spring----MyBatis整合
    VueRouter案列
    Vue-Router
    axios用法
    Fetch的使用
    Promise用法
    组件之间传值
    局部组件注册方式
    学习组件与模板
    如何实现new,call,apply,bind的底层原理。
  • 原文地址:https://www.cnblogs.com/students/p/14230171.html
Copyright © 2011-2022 走看看