JobPlus知识库 IT 大数据 文章
[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.

  1. create table page_views (

  2. track_time string,

  3. url string,

  4. session_id string,

  5. referer string,

  6. ip string,

  7. end_user_id string,

  8. city_id string

  9. )

  10. row format delimited fileds yerminated by '\t';

  11. 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类

  1. package com.bigdata.spark.core

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

  3. object AvgAgeCalculatorApp {

  4. def main(args: Array[String]): Unit = {

  5. val sparkConf = new SparkConf()

  6. val sc = new SparkContext(sparkConf)

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

  8. // 取出年龄

  9. val ageData = dataFile.map(x => x.split(" ")(1))    //.take(10).foreach(println)

  10. // 求人数

  11. val count = dataFile.count()

  12. // 年龄相加/人数

  13. val totalAge = ageData.map(age => age.toInt).reduce(_+_)

  14. val avgAge = totalAge/count

  15. sc.stop()

  16. }

  17. }

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

 

案例二:

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

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

分析:

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

2) MRDD sort/max/min

3) FRDD sort/max/min


如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏支持
144人赞 举报
分享到
用户评价(0)

暂无评价,你也可以发布评价哦:)

扫码APP

扫描使用APP

扫码使用

扫描使用小程序