• Spark算子



    释义

    根据RDD中的某个属性进行分组,分组后形式为(k, [v1, v2, ...])
    方法签名如下:

    def groupByKey(): RDD[(K, Iterable[V])] = self.withScope {
        ...
    }
    

    案例

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

    object TestGroupByKey {
      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])] = sc.parallelize(data)
          .groupByKey()
          .collect()
        result.foreach(println)
      }
    }
    

    输出

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

    解释

    1. 根据key分组,即根据科目分组,分组后为K-V型RDD,key为科目,value为元素是学生名字的CompactBuffer
      • 这是Spark定义的结构(源码),类似于Scala原生的ArrayBuffer,但比后者性能更好
      • CompactBuffer 继承自序列,因此它很容易的进行遍历和迭代,可以把它理解成一个列表
    2. groupByKeygroupBy 的最大区别就是前者计算后CompactBuffer 的元素没有原始的key,而后者有



    尊重写作权利,转载请注明出处 ^_^
  • 相关阅读:
    SharePoint Framework 构建你的第一个web部件(二)
    win32
    win32
    win32
    win32
    C++ 将filesystem::path转换为const BYTE*
    win32
    win32
    win32
    win32
  • 原文地址:https://www.cnblogs.com/convict/p/14882369.html
Copyright © 2020-2023  润新知