2022-04-20 17:43阅读: 72评论: 0推荐: 0

6. RDD综合练习:更丰富的操作

一、集合运算练习

union()intersection()subtract(), cartesian()

rdd1 = sc.parallelize('abcd')
rdd2 = sc.parallelize('bcde')

rdd1.union(rdd2).collect()

rdd1.subtract(rdd2).collect()

rdd1.intersection(rdd2).collect()

rdd1.cartesian(rdd2).collect()

二、内连接与外连接

rdd6 = sc.textFile('file:///home/hadoop/kq06.txt').map(lambda line:(line,'06'))
rdd6.collect()

rdd7 = sc.textFile('file:///home/hadoop/kq07.txt').map(lambda line:(line,'07'))
rdd7.collect()

多个考勤文件,签到日期汇总

使用join(), leftOuterJoin(), rightOuterJoin(), fullOuterJoin()

rdd6.join(rdd7).collect()

rdd6.leftOuterJoin(rdd7).collect()

rdd6.rightOuterJoin(rdd7).collect()

rdd6.fullOuterJoin(rdd7).collect()

出勤次数统计

rdd3 = sc.textFile('file:///home/hadoop/kq06.txt').map(lambda line:(line,1))
rdd4 = sc.textFile('file:///home/hadoop/kq07.txt').map(lambda line:(line,1))

rdd3.union(rdd4).collect()

rdd3.union(rdd4).reduceByKey(lambda a,b:a+b).collect()

三、综合练习:学生课程分数

网盘下载sc.txt文件,通过RDD操作实现以下数据分析:

  • 持久化 scm.cache()
url = 'file:///home/hadoop/下载/sc.txt'
scm = sc.textFile(url).map(lambda line:line.split(',')).map(lambda line:[line[0],line[1],int(line[2])])
scm.cache()

scm.take(3)

  • 总共有多少学生?开设了多少门课程?map(), distinct(), count()
scm.count()
scm.map(lambda line:line[0]).distinct().count()
scm.map(lambda line:line[1]).distinct().count()   # 开设几门课程

  • 生成(姓名,课程分数)键值对RDD
name = scm.map(lambda line:(line[0],(line[1],line[2])))
name.take(3)

  • 观察 keys(), values()
name.keys().take(6)
name.values().take(6)

  • 每个学生选修了多少门课?map(), countByKey()
name.countByKey()

  • 每门课程有多少个学生选?map(), countByValue()
name.values().countByKey()

  • 有多少个100分?
name.values().values().countByValue()[100]

name.take(1)
name.values().take(1)
name.values().values().take(1)

  • Tom选修了几门课?每门课多少分?filter(), map() RDD
scm.filter(lambda line:line[0]=='Tom').map(lambda line:line[1]).collect()
scm.filter(lambda line:line[0]=='Tom').map(lambda line:line[1]).count()

scm.filter(lambda line:line[0]=='Tom').collect()

  • Tom选修了几门课?每门课多少分?map(),lookup() list
len(name.lookup('Tom'))

name.lookup('Tom')

  • Tom的成绩按分数大小排序。filter(), map(), sortBy()
name.filter(lambda line:line[0]=='Tom').values().collect()
name.filter(lambda line:line[0]=='Tom').values().sortBy(lambda a:a[1], False).collect()

  • Tom的平均分。map(),lookup(),mean()
import numpy as np
np.mean(scm.filter(lambda line:line[0]=='Tom').map(lambda line:line[2]).collect())

  • 生成(姓名课程,分数)RDD,观察 keys(), values()
score = scm.map(lambda line:((line[0],line[1]),line[2]))
score.take(3)

  • 每个分数+20平时分,分别用mapValues(func)map(func)实现,并查看不及格人数的变化
scm.filter(lambda line:line[2]<60).count()

adjust = score.mapValues(lambda v:v+20)
adjust.first()
adjust.filter(lambda line:line[1]<60).count()

score = scm.map(lambda line:((line[0],line[1]),line[2]*0.8+20))
score.filter(lambda line:line[1]<60).count()

  • 求每门课的平均分

    1. lookup(), np.mean()实现

      course.lookup('OperatingSystem')
      np.mean(list(map(int,course.lookup('OperatingSystem'))))
      

    2. reduceByKey()collectAsMap()实现

      course = scm.map(lambda line:(line[1],(line[2],1)))
      result = course.reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1])).map(lambda a:(a[0],a[1][1],round(a[1][0]/a[1][1], 2))).collect()
      result
      

      result = course.reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1])).map(lambda a:(a[0],round(a[1][0]/a[1][1], 2))).collectAsMap()
      result
      

    3. combineByKey()map()round()实现,确到2位小数

      course=scm.map(lambda line:(line[1],line[2]))
      course.first()
      courseC=course.combineByKey(
      	lambda v: (int(v),1), 
      	lambda c,v:(c[0]+int(v),c[1]+1),
      	lambda c1,c2:(c1[0]+c2[0],c1[1]+c2[1]))
      courseC.collect()
      courseC.map(lambda x:(x[0],x[1][1],round(x[1][0]/x[1][1], 2))).collect()
      

本文作者:stu(dying)

本文链接:https://www.cnblogs.com/DingyLand/p/homework_06_.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   stu(dying)  阅读(72)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 Dancing with my phone (Explicit) HYBS
  2. 2 Catch (Feat. Hwa Sa) Epik High (에픽하이)
  3. 3 건물 사이에 피어난 장미 (Rose Blossom) H1-KEY
  4. 4 The Weekend 88rising,BIBI
  5. 5 天气未报 余佳运
  6. 6 和你 余佳运
  7. 7 九月底 余佳运
  8. 8 POP/STARS K/DA,Madison Beer,(G)I-DLE,Jaira Burns
  9. 9 Uh-Oh (G)I-DLE
  10. 10 For You (G)I-DLE
  11. 11 데이지(雏菊) PENTAGON
  12. 12 BAD PENTAGON
Uh-Oh - (G)I-DLE
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 田小娟

作曲 : 田小娟/쥰/MooF (153/Joombas)

编曲 : 쥰/MooF (153/Joombas)

Uh-oh 거기 누군가요

Uh-oh 나를 안다고요

Uh-oh 난 잊어버렸죠 버렸죠

너도 웃기지 않나요

난 좀 당황스럽네요

Uh-oh 친한 척 말아줘 말하고 다녀

Uh-uh-oh 만지지 말고 저기 떨어져요

내게 뭐를 원하나요 다 똑같죠 너처럼

너 같은 거는 이제 전혀 모르겠네요

Uh-uh-oh 나 변했나요 다 똑같죠 너처럼

베풀거나 내주거나 천사 같은 Hello

달콤하게 사탕 발린 말도

예의 없어 착한 척 말고 꺼져

이제 와 가식 따위 떨지 말아

맴돌거나 말 걸거나 박쥐 같은 Follower

내 성공을 점쳤다는 Liar

어이없어 친한 척 말고 꺼져

널 위한 가식 따윈 기대 말아

엉망진창 Only see now

몰랐지 오리 속 Swan

황홀한 케이크 위 Blow out

내 머리 위에 Crown

Yo 말했지 이곳의 보석은 나야 투자해 어서

넌 번쩍거린 것만 찾느라

여길 번쩍 들어 올릴 난 못 찾았어

Uh uh uh uh uh uh

No no no no no no

너 별로 더 별로야 됐으니 꺼져

Uh-uh-oh 만지지 말고 저기 떨어져요

내게 뭐를 원하나요 다 똑같죠 너처럼

너 같은 거는 이제 전혀 모르겠네요

Uh-uh-oh 나 변했나요 다 똑같죠 너처럼

베풀거나 내주거나 천사 같은 Hello

달콤하게 사탕 발린 말도

예의 없어 착한 척 말고 꺼져

이제 와 가식 따위 떨지 말아

맴돌거나 말 걸거나 박쥐 같은 Follower

내 성공을 점쳤다는 Liar

어이없어 친한 척 말고 꺼져

널 위한 가식 따윈 기대 말아

Uh-oh 믿을 수 없게

Uh-oh 손댈 수 없게

Uh-oh 잘못된 것 같은 얘기

Yo you got it

Don't mess with me

Umm I'm not finished

Ok let's go

아무도 몰랐지

이 Masterpiece 이 Masterpiece

입가에 반복되는 Melody oh melody

너무나 완벽한 내 A to Z oh A to Z

팬들은 사랑해 Yeah L-O-V-E yeah L-O-V-E

Uh-oh