2019独角兽企业重金招聘Python工程师标准>>>

一、环境安装

1.安装hadoop

http://my.oschina.net/u/204498/blog/519789

2.安装spark

3.启动hadoop

4.启动spark

二、

1.数据准备

从MAPR官网上下载数据DEV360DATA.zip并上传到server上。

[hadoop@hftclclw0001 spark-1.5.1-bin-hadoop2.6]$ pwd
/home/hadoop/spark-1.5.1-bin-hadoop2.6[hadoop@hftclclw0001 spark-1.5.1-bin-hadoop2.6]$ cd test-data/[hadoop@hftclclw0001 test-data]$ pwd
/home/hadoop/spark-1.5.1-bin-hadoop2.6/test-data/DEV360Data[hadoop@hftclclw0001 DEV360Data]$ ll
total 337940
-rwxr-xr-x 1 hadoop root    575014 Jun 24 16:18 auctiondata.csv        =>c测试用到的数据
-rw-r--r-- 1 hadoop root  57772855 Aug 18 20:11 sfpd.csv
-rwxrwxrwx 1 hadoop root 287692676 Jul 26 20:39 sfpd.json[hadoop@hftclclw0001 DEV360Data]$ more auctiondata.csv
8213034705,95,2.927373,jake7870,0,95,117.5,xbox,3
8213034705,115,2.943484,davidbresler2,1,95,117.5,xbox,3
8213034705,100,2.951285,gladimacowgirl,58,95,117.5,xbox,3
8213034705,117.5,2.998947,daysrus,10,95,117.5,xbox,3
8213060420,2,0.065266,donnie4814,5,1,120,xbox,3
8213060420,15.25,0.123218,myreeceyboy,52,1,120,xbox,3
...
...#数据结构如下
auctionid,bid,bidtime,bidder,bidrate,openbid,price,itemtype,daystolve#把数据上传到HDFS中
[hadoop@hftclclw0001 DEV360Data]$ hdfs dfs -mkdir -p /spark/exer/mapr
[hadoop@hftclclw0001 DEV360Data]$ hdfs dfs -put auctiondata.csv /spark/exer/mapr
[hadoop@hftclclw0001 DEV360Data]$ hdfs dfs -ls /spark/exer/mapr
Found 1 items
-rw-r--r--   2 hadoop supergroup     575014 2015-10-29 06:17 /spark/exer/mapr/auctiondata.csv

2.运行spark-shell 我用的scala.并针对以下task,进行分析

tasks:

a.How many items were sold?

b.How many bids per item type?

c.How many different kinds of item type?

d.What was the minimum number of bids?

e.What was the maximum number of bids?

f.What was the average number of bids?

[hadoop@hftclclw0001 spark-1.5.1-bin-hadoop2.6]$ pwd
/home/hadoop/spark-1.5.1-bin-hadoop2.6[hadoop@hftclclw0001 spark-1.5.1-bin-hadoop2.6]$ ./bin/spark-shell
...
...
scala >#首先从HDFS加载数据生成RDD
scala > val originalRDD = sc.textFile("/spark/exer/mapr/auctiondata.csv")
...
...
scala > originalRDD      ==>我们来分析下originalRDD的类型 RDD[String] 可以看做是一条条String的数组,Array[String]
res26: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:21##根据“,”把每一行分隔使用map
scala > val auctionRDD = originalRDD.map(_.split(","))
scala> auctionRDD        ==>我们来分析下auctionRDD的类型 RDD[Array[String]] 可以看做是String的数组,但元素依然是数组即,可以认为Array[Array[string]]
res17: org.apache.spark.rdd.RDD[Array[String]] = MapPartitionsRDD[5] at map at <console>:23

a.How many items were sold?

 ==> val count = auctionRDD.map(bid => bid(0)).distinct().count()

根据auctionid去重即可:每条记录根据“,”分隔,再去重,再计数

#获取第一列,即获取auctionid,依然用map
#可以这么理解下面一行,由于auctionRDD是Array[Array[String]]那么进行map的每个参数类型是Array[String],由于actionid是数组的第一位,即获取第一个元素Array(0),注意是()不是[]
scala> val auctionidRDD = auctionRDD.map(_(0))
...
...scala> auctionidRDD        ==>我们来分析下auctionidRDD的类型 RDD[String] ,理解为Array[String],即所有的auctionid的数组
res27: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[17] at map at <console>:26#对auctionidRDD去重
scala > val auctionidDistinctRDD=auctionidRDD.distinct()#计数
scala > auctionidDistinctRDD.count()
...
...

b.How many bids per item type?

===> auctionRDD.map(bid => (bid(7),1)).reduceByKey((x,y) => x + y).collect()

#map每一行,获取出第7列,即itemtype那一列,输出(itemtype,1)
#可以看做输出的类型是(String,Int)的数组
scala > auctionRDD.map(bid=>(bid(7),1))
res30: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[26] at map at <console>:26
...#reduceByKey即按照key进行reduce
#解析下reduceByKey对于相同的key,
#(xbox,1)(xbox,1)(xbox,1)(xbox,1)...(xbox,1) ==> reduceByKey ==> (xbox,(..(((1 + 1) + 1) + ... + 1))
scala > auctionRDD.map(bid=>(bid(7),1)).reduceByKey((x,y) => x + y)
#类型依然是(String,Int)的数组 String=>itemtype Int已经是该itemtype的计数总和了
res31: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[28] at reduceByKey at <console>:26#通过collect() 转换成 Array类型数组
scala > auctionRDD.map(bid=>(bid(7),1)).reduceByKey((x,y) => x + y).collect()res32: Array[(String, Int)] = Array((palm,5917), (cartier,1953), (xbox,2784))

转载于:https://my.oschina.net/u/204498/blog/523576

Spark MaprLab-Auction Data分析相关推荐

  1. 【华为云技术分享】大数据实践解析(下):Spark的读写流程分析

    摘要:本文通过简单的例子来解析,大数据实践中的Spark读写流程,内容主要聚焦于Spark中的高效并行读写以及在写过程中如何保证事务性. 导读: 众所周知,在大数据/数据库领域,数据的存储格式直接影响 ...

  2. Spark Shuffle源码分析系列之PartitionedPairBufferPartitionedAppendOnlyMap

    概述 SortShuffleWriter使用ExternalSorter进行ShuffleMapTask数据内存以及落盘操作,ExternalSorter中使用内存进行数据的缓存过程中根据是否需要ma ...

  3. Spark详解(十一):Spark运行架构原理分析

    1. Spark 运行架构总体分析 1.1 总体介绍 Spark应用程序的运行架构基本上由三部分组成,包括SparkContext(驱动程序).ClusterManger(集群资源管理器)和Execu ...

  4. Spark配置启动脚本分析

    2019独角兽企业重金招聘Python工程师标准>>> 今天想停止spark集群,发现执行stop-all.sh的时候spark的相关进程都无法停止.提示: no org.apach ...

  5. 基于Spark的用户行为分析系统

    基于Spark的用户行为分析系统源码下载 一.项目介绍   本项目主要用于互联网电商企业中使用Spark技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.购物行为.广告点击行为等)进行 ...

  6. Spark之购物篮分析

    Spark之购物篮分析 关于购物篮分析,具体的思路可以看 Mapreduce之购物篮分析 以下是编写号的Spark程序 package MBAimport org.apache.spark.{Spar ...

  7. spark mllib源码分析之DecisionTree与GBDT

    我们在前面的文章讲过,在spark的实现中,树模型的依赖链是GBDT-> Decision Tree-> Random Forest,前面介绍了最基础的Random Forest的实现,在 ...

  8. spark mllib源码分析之随机森林(Random Forest)

    Spark在mllib中实现了tree相关的算法,决策树DT(DecisionTree),随机森林RF(RandomForest),GBDT(Gradient Boosting Decision Tr ...

  9. Spark之Task原理分析

    在Spark中,一个应用程序要想被执行,肯定要经过以下的步骤:          从这个路线得知,最终一个job是依赖于分布在集群不同节点中的task,通过并行或者并发的运行来完成真正的工作.由此可见 ...

最新文章

  1. 难忘的一天——装操系统(五)
  2. 京东的热点key探测系统发布,单机 QPS 提升至 37 万
  3. mysql类 php100_PHP100视频教程26:制作自己的PHP+MYSQL的类
  4. Mysql foreignkey 相关
  5. Pyhon Django 表单类ModelForm注册案例(可直接操作数据库)
  6. 前端进阶 -css的弱化与js的强化(11)
  7. Php输出Xml报错:XML declaration allowed only at the start of the document
  8. AIML元素详细说明
  9. 推荐系统走向下一阶段最重要的三个问题
  10. mysql semi sync_MySQL Semisync
  11. 初次见面C#排坑记录
  12. 360全景拍摄中相机的白平衡设置
  13. 【APP自动化测试】Python + Appium + 模拟器 +UiAutomatorViewer 实现APP自动化测试
  14. 征途完美单机版_征途世界单机版
  15. 将vtt字幕转成srt
  16. 第一章 富爸爸,穷爸爸
  17. VI退出 退出VIM 适用新手
  18. eve-ng学习笔记
  19. Android Studio 3.0 多渠道打包 解决All flavors must now belong to a named flavor dimension
  20. Linux 软件包安装

热门文章

  1. 【TensorFlow-windows】学习笔记六——变分自编码器
  2. 李宏毅机器学习课程3~~~梯度下降法
  3. 人工智能泰斗迈克尔·乔丹分享机器学习要义:创新视角,直面挑战
  4. 牛客33-tokitsukaze and Number Game(数论)
  5. React-Router ---withRouter
  6. redis在linux命令行下连续进行命令操作
  7. centos 安装软件
  8. 教会你Linux Shell自动交互的三种方法
  9. 【原题】【noip 2003 T2】【动态规划】加分二叉树
  10. sqlserver中在建立与服务器的连接时出错