zoukankan      html  css  js  c++  java
  • 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))}
  • 相关阅读:
    ASP.NET Cookies的使用
    How to trigger editing of elements inside a reorderlist?
    Not in 的LinQ实现
    .Net中TextBox回车捕捉
    多个TermQuery或一个MultiFieldQueryParser构建BooleanQuery多个域的检索学习实例代码
    ASP.NET的异常处理
    一些有用的API 之 飛信發短信
    C# lock 避免多人同时操作
    一個人性化的“Error 404”,不要錯過!
    SQL索引系列(四)
  • 原文地址:https://www.cnblogs.com/damonzjw/p/8530870.html
Copyright © 2011-2022 走看看