spark core刷题

首先看表内容:(这里用txt来记录)

score表

第一列是学生id 第二列是课程id 第三列是分数

需求是:查询至少有一门课与学号为" 1 "的同学所学相同的同学的信息

思路一:

思路就是连接 把01课程上的课程id找出来 发现是一列 可以转成一行(思路二)这里只需要连接即可 就只要和其他同学上的课程id连接 但凡有连接上的说明就有上的课程相同的 然后去重学生id即可
def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[*]").setAppName("exp01")
    val sc = new SparkContext(conf)
    val scoreRDD = sc.textFile("file:///d:/exp/score.txt")//连接

    //把id为1上的课程筛选出来 课程id作为元组的第一个元素 随便取个1作为第二个元素
    //因为join的前提是必须是二元元组 凑个1
    var s2 = scoreRDD.map(line => {
      val infos = line.split(",")
      (infos(0), infos(1))
    }).filter(_._1.equals("1")).map(x=>(x._2,1))

    //两表连接
    scoreRDD.map(line => {
      val infos = line.split(",")
      (infos(0), infos(1))}).map(x=>(x._2,x._1)).
      join(s2).map(x=>x._2._1).distinct().foreach(println)

思路二:

就是你把查出来的id为1的课程号变成一行 因为你正常filter出来的是一列 办法就是group by

group by sid 以后我们发现每个sid后面会跟一个迭代器 迭代器包括上的cid 然后转list foreach取出来就好

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后季暖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值