Spark groupBy

Spark groupBy功能

按照传入函数的返回值进行分组,将相同的key对应的值放入一个迭代器中

案例演示

需求:将List(1, 2, 3, 4, 5, 6, 7, 8, 9)按照奇偶输出到控制台,形式如下

偶数:2468
奇数:13579

package com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Package : com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transform
 * @Desc : 按照传入函数的返回值进行分组,将相同的key对应的值放入一个迭代器中
 */
object Spark05_GroupBy {
  def main(args: Array[String]): Unit = {
    //创建配置文件
    val conf: SparkConf = new SparkConf().setAppName("Spark05_GroupBy").setMaster("local[*]")
    //创建SparkContext,该对象是提交的入口
    val sc = new SparkContext(conf)
    //创建RDD
    val rdd: RDD[Int] = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9))
    //按照奇偶数进行分组
    val groupbyRDD: RDD[(Int, Iterable[Int])] = rdd.groupBy((x: Int) => {
      x % 2
    })
    //打印数据
    groupbyRDD.collect().foreach((t: (Int, Iterable[Int])) => {
      t._1 match {
        case 1 => {
          print("奇数:")
          t._2.foreach(print(_))
          println()
        }
        case _ => {
          print("偶数:")
          t._2.foreach(print(_))
          println()
        }
      }
    })
    sc.stop() 
 }
}

小练习:用groupBy实现wordCount

package com.xcu.bigdata.spark.core.pg01_wordcount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Desc : 专门针对groupBy算子的小案例
 */
object Spark02_WordCount {
   def main(args: Array[String]): Unit = {
    // 创建配置文件
    val conf: SparkConf = new SparkConf().setAppName("Spark03_WordCount").setMaster("local[*]")
    // 创建SparkContext,该对象是提交的入口
    val sc = new SparkContext(conf)
    // 创建RDD
    val rdd: RDD[String] = sc.makeRDD(List("Hello Scala", "Hello Spark", "Hello World"))

    // 扁平化
    val flatMapRDD: RDD[String] = rdd.flatMap((s: String) => {
      s.split(" ")
    })
    // 分组
    val groupByRDD: RDD[(String, Iterable[String])] = flatMapRDD.groupBy((word: String) => {
      word
    })
    // 单词统计
    val mapRDD: RDD[(String, Int)] = groupByRDD.map((t: (String, Iterable[String])) => {
      (t._1, t._2.size)
    })
    // 打印输出
    mapRDD.collect().foreach(println)
    // 释放资源
    sc.stop()
  }
}

输出:

(Hello,3)
(World,1)
(Spark,1)
(Scala,1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值