Spark实战练习03--Pair RDD

一、场景

现有某网站的网站日志,内容为用户对网站的请求,包含user ID、IP address、datetime……等等

另有一份文件中包含用户的账户详细信息数据,包含User ID、creation date、first 、last name等等

二、任务

1、统计每位用户的请求次数

// 1、从文件创建一个RDD,每行为一个元素,*读取目录下所有文件
val mydata=sc.textFile("hdfs:/loudacre/weblogs/*")
// 2、分组数据
val mydata1=mydata.map(line => line.split(" "))
// 3、构造K-V,Pair RDD
val mydata2=mydata1.map(line =>(line(2),1))
// 4、统计用户的请求次数
val mydata3=mydata2.reduceByKey((v1,v2)=> v1 + v2)

2、统计相同请求次数的用户

// 1、转置,将次数与用户id互换位置,方便使用countByKey得到一个map结构
val mydata4=mydata3.map(line=>(line._2,line._1))
// 2、计算相同请求次数的用户
val myresult1=mydata4.countByKey()

3、统计用户访问的IP地址

// 1、构建用户:IP Pair RDD
val mydata5=mydata1.map(line =>(line(2),line(0)))
// 2、统计用户访问的IP地址
val myresult2=mydata5.groupByKey()

4、关联两个文件,得到用户的访问次数

RDD格式:

userid1 6 Rick Hopper
userid2 8 Lucio Arnold
userid3 2 Brittany Parrott

// 1、引入数据,创建一个RDD,每行为一个元素
val mydata6=sc.textFile("hdfs:/loudacre/accounts/*")
// 2、分组数据,得到数组
val mydata7=mydata6.map(line=>line.split(","))
// 3、构建结构
val mydata8=mydata7.map(line=>(line(0),line))
// 4、连接数据
val myresult3=mydata8.join(mydata3)
// 5、格式化输出
for( line <- myresult3.take(10)){
printf("%s %s %s %s
",line._1,line._2._2,line._2._1(3),line._2._1(4))}
原文地址:https://www.cnblogs.com/damonzjw/p/8530870.html