• 2023_Spark_实验十:RDD基础算子操作


    Ø练习 1:

    1. //通过并行化生成 rdd
    2. val rdd1 = sc.parallelize(List(5, 6, 4, 7, 3, 8, 2, 9, 1, 10))
    3. //对 rdd1 里的每一个元素乘 2 然后排序
    4. val rdd2 = rdd1.map(_ * 2).sortBy(x => x, true)
    5. //过滤出大于等于十的元素
    6. val rdd3 = rdd2.filter(_ >= 10)
    7. //将元素以数组的方式在客户端显示
    8. rdd3.collect

    Ø 练习 2:

    1. val rdd1 = sc.parallelize(Array("a b c", "d e f", "h i j"))
    2. //将 rdd1 里面的每一个元素先切分在压平
    3. val rdd2 = rdd1.flatMap(_.split(' '))
    4. rdd2.collect

    Ø 练习 3:

    1. val rdd1 = sc.parallelize(List(5, 6, 4, 3))
    2. val rdd2 = sc.parallelize(List(1, 2, 3, 4))
    3. //求并集
    4. val rdd3 = rdd1.union(rdd2)
    5. //求交集
    6. val rdd4 = rdd1.intersection(rdd2)
    7. //去重
    8. rdd3.distinct.collect
    9. rdd4.collect

    Ø 练习 4:

    1. val rdd1 = sc.parallelize(List(("tom", 1), ("jerry", 3), ("kitty", 2)))
    2. val rdd2 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("shuke", 2)))
    3. //求 jion
    4. val rdd3 = rdd1.join(rdd2)
    5. rdd3.collect
    6. //求并集
    7. val rdd4 = rdd1 union rdd2
    8. //按 key 进行分组
    9. val rdd5=rdd4.groupByKey
    10. rdd5.collect

    Ø 练习 5:

    1. val rdd1 = sc.parallelize(List(("tom", 1), ("tom", 2), ("jerry", 3), ("kitty", 2)))
    2. val rdd2 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("shuke", 2)))
    3. //cogroup
    4. val rdd3 = rdd1.cogroup(rdd2)
    5. //注意 cogroup 与 groupByKey 的区别

    groupByKey

    groupByKey会将RDD[key,value]按照相同的key进行分组,形成RDD[key,iterable[value]]的形式,有点类似于sql中的groupby,例如类似于mysql中的group_contact

    cogroup

    groupByKey是对单个RDD的数据进行分组,还可以使用一个叫作cogroup()的函数对多个共享同一个键的RDD进行分组

    例:RDD1.cogroup(RDD2)会将RDD1和RDD2按照相同的key进行分组,得到(key,RDD[key,Iterable[value1],Iterable[value2]])的形式

    cogroup也可以多个进行分组

    例:RDD1.cogroup(RDD2,RDD3,…RDDN),可以得到

    (key,Iterable[value1],Iterable[value2],Iterable[value3],…,Iterable[valueN])

    rdd3.collect

    Ø 练习 6:

    1. val rdd1 = sc.parallelize(List(1, 2, 3, 4, 5,6,7,8,9,10))
    2. //reduce 聚合
    3. val rdd2 = rdd1.reduce(_ + _)
    4. //rdd2.collect

    Ø 练习 7:

    1. val rdd1 = sc.parallelize(List(("tom", 1), ("jerry", 3), ("kitty", 2), ("shuke", 1)))
    2. val rdd2 = sc.parallelize(List(("jerry", 2), ("tom", 3), ("shuke", 2), ("kitty", 5)))
    3. val rdd3 = rdd1.union(rdd2)
    4. //按 key 进行聚合
    5. val rdd4 = rdd3.reduceByKey(_ + _)
    6. rdd4.collect
    7. //按 value 的降序排序
    8. val rdd5 = rdd4.map(t => (t._2, t._1)).sortByKey(false).map(t => (t._2, t._1))
    9. rdd5.collect

  • 相关阅读:
    R语言根据日历周期处理时间序列数据(周、月、年等):使用xts包的apply.monthly函数和mean函数计算时间序列的月平均值(monthly)
    OpenMLDB BUG 悬赏令
    设计模式学习
    visual studio 15 无法卸载(安装时发生严重错误)
    ai人工智能电话机器人应用市场分析
    vue指令
    卷麻了,00后测试用例写的比我还好,简直无地自容......
    基于Vue+SpringBoot的海南旅游景点推荐系统 开源项目
    第七章 数学 AcWing 1533. 1 的个数
    php laravel
  • 原文地址:https://blog.csdn.net/pblh123/article/details/133081013