zoukankan      html  css  js  c++  java
  • Spark算子


    释义

    根据RDD中的某个属性进行分组,分组后形式为(k, [(k, v1), (k, v2), ...]),即groupBy 后组内元素会保留key值
    方法签名如下:

    def groupBy[K](f: T => K)(implicit kt: ClassTag[K]): RDD[(K, Iterable[T])] = withScope {
       ...
    }
    

    f: 分组操作。输入类型为T,操作过程为K,最后RDD形式为K, 迭代器(T)的形式,即同上所述形式

    案例

    查看每个科目有哪些学生选择

    object TestGroupBy {
      def main(args: Array[String]): Unit = {
        val conf: SparkConf = new SparkConf().setAppName("TestReduceByKey").setMaster("local[1]")
        val sc: SparkContext = new SparkContext(conf)
        val data = Array(("Science", "Jack"), ("Science", "Tom"), ("Music", "Nancy"), ("Sport", "Tom"), ("Music", "Tony"))
        val result: Array[(String, Iterable[(String, String)])] = sc.parallelize(data)
          .groupBy(v => v._1)
          .collect()
        result.foreach(println)
      }
    }
    

    输出

    (Music,CompactBuffer((Music,Nancy), (Music,Tony)))
    (Science,CompactBuffer((Science,Jack), (Science,Tom)))
    (Sport,CompactBuffer((Sport,Tom)))
    

    解释

    1. 根据v._1即名字进行分组,分组后key为名字,value为CompactBuffer
    • 这是Spark定义的结构(源码),类似于Scala原生的ArrayBuffer,但比后者性能更好
    • CompactBuffer 继承自序列,因此它很容易的进行遍历和迭代,可以把它理解成一个列表
    1. 分组后,CompactBuffer 中的值会保留调用groupBy时的RDD格式



    尊重写作权利,转载请注明出处 ^_^
  • 相关阅读:
    第4章.计算节点
    Eclipse插件ViPlugin2.X的破解方法
    金刚经
    js
    C++ 重写重载重定义区别
    string::substr()简介
    信息熵与二进制
    一个简单的条件概率问题
    HPLINUX hplinux 安装升级 至 jdk1.8
    linux 解压命令
  • 原文地址:https://www.cnblogs.com/convict/p/14882332.html
Copyright © 2011-2022 走看看