[Spark] 使用IDEA构建Spark应用程序实例

环境:

本地:win7 + jdk1.8 + IntelliJ IDEA 2018.1.2 + maven-3.3.9 + scala插件,机器要求可以联网(需要下载各种依赖包)

远程:CentOS7.3 + jdk1.8 + scala-2.11.12 + hadoop-2.6.0-cdh5.7.0 + hive-1.1.0-cdh5.7.0-bin + spark-2.2.0-bin-2.6.0-cdh5.7.0 

实例一: 

已有用户访问记录表(hive表),用spark core来求用户访问量的TOP5.

create table page_views (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
row format delimited fileds yerminated by '\t';
load data local infile '/home/hadoop/data/xxx.txt' ...

解决方案:

1. hiveql 直接查询出来结果

select end_user_id,count(1) c from page_views group by end_user_id order by c desc limit 5;

2. 使用Spark Core来实现

2.1 需求分析

1) 用户:

使用tab分割 ==> split

拿到userid ==> splits(5)

(userid, 1)

2) 访问量

reduceByKey(_+_)  ==> (userid, n)

3) TOP N

反转 ==> (n, userid)

排序 ==> sortByKey

反转 ==> 

take(5)

2.2 实现思路

 

2.3 代码实现

IDEA创建一个scala类

package com.bigdata.spark.core

import org.apache.spark.{SparkConf, SparkContext}

object AvgAgeCalculatorApp {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf()
    val sc = new SparkContext(sparkConf)

    val dataFile = sc.textFile("file:///home/hadoop/data/sample_age_data.txt")

    // 取出年龄
    val ageData = dataFile.map(x => x.split(" ")(1))    //.take(10).foreach(println)

    // 求人数
    val count = dataFile.count()

    // 年龄相加/人数
    val totalAge = ageData.map(age => age.toInt).reduce(_+_)
    val avgAge = totalAge/count

    sc.stop()
  }

}

打包并放到服务器上面提交运行

 

 

案例二:

已有男女性别、身高数据表

需求:1)统计男女人数;2)男性中最高和最低身高;3)女性中最高和最低身高

分析:

1) RDD ==> MRDD + FRDD,一个RDD拆成2个RDD,分开计算

2) MRDD sort/max/min

3) FRDD sort/max/min

 

 

TO BE UPDATE LATER ON...

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/wawa8899/article/details/81069156