用SparkR探索电商数据(一)

        R是数据科学家中最流行的编程语言之一, 但目前R的运行受限于单机的内存容量,无法满足大数据时代的海量数据处理需求。Apache顶级开源项目Spark是Hadoop之后备受关注的新一代分布式计算平台,于是,R和Spark的强强结合使得SparkR应运而生。SparkR是一个R语言包,它提供了轻量级的方式,使得可以在R语言中使用Apache Spark。通过用R语言编写Spark程序,允许数据科学家分析大规模的数据集,并通过R shell交互式地在SparkR上运行作业。2015年4月,SparkR已经合并到Apache Spark中,并随着Spark 1.4版本一起发布!

        本人最近也体验了一把SparkR,采用的数据是一份搜索产品的明细,是一家购物比价搜索网站的2012年双11节前节后一周和2013年618前后一周的数据。代码是指导手下的实习生做的,Spark版本是2.1.1,话不多说,直接上效果大笑


(一)数据读入

df<-read.df("file:///home/baoyu/datas/JT_data.csv","csv",header="true")      #本地模式,创建SparkR DataFrame
head(df)


(二)部分字段统计:

b=summarize(groupBy(df, df$SHOP), count = n(df$SHOP)) 
head(arrange(b, desc(b$count)))
c=summarize(groupBy(df, df$MAIN_CATE), count = n(df$MAIN_CATE))
head(arrange(c, desc(c$count)))



(三)搜索量排名

       搜索量排前十名的网店:

createOrReplaceTempView(b,"b")      # 创建临时表
b1=head(arrange(b, desc(b$count)),10)
bs1=sum(b1$count)
bs2=sql("select sum(count) from b") # 类SQL查询
bb=(as.data.frame(bs2)-bs1)[,1]     # 转化为R DataFrame
row=c(' Other ',bb)
b1=rbind(b1,row)
b1[,2]=as.numeric(b1[,2])
b1=b1[order(b1[,2],decreasing=T),]
precent=round(b1$count/sum(b1$count)*100)
label=paste(paste(c("Other ","淘宝网","京东商城","当当网商城","当当网","亚马逊中国","易迅网"," 1号店","苏宁易购","唯品会","库巴"),":"),precent,"%",sep="")
pie(b1[,2],labels=label,main="TOP10 SHOP",radius=1)




通过跟上面类似的代码分析,可以得到搜索量排前十名的城市:
 
 


(四)价格分布

createOrReplaceTempView(df,"df")
sparkR.session()

把价格分成几个区间

g1=sql("select count(*) from df WHERE PRICE<500")
g2=sql("select count(*) from df WHERE PRICE>500 and PRICE<5000")
g3=sql("select count(*) from df WHERE PRICE>5000 and PRICE<10000")
g4=sql("select count(*) from df WHERE PRICE>10000 and PRICE<50000")
g5=sql("select count(*) from df WHERE PRICE>50000 and PRICE<500000")
g6=sql("select count(*) from df WHERE PRICE>500000 and PRICE<1000000")
g1=as.data.frame(g1)
g2=as.data.frame(g2)
g3=as.data.frame(g3)
g4=as.data.frame(g4)
g5=as.data.frame(g5)
g6=as.data.frame(g6)
price=rbind(g1,g2,g3,g4,g5,g6)
par(mfrow=c(1,1))
hist(price[,1])


row=c("<500","500~1000","1000~5000","5000~50000","50000~500000","500000~1000000")
column=c("connt")
dimnames(price)=list(row,column)
price



(五)时段分布

下面看一下,各个时段的搜索量变化。

t =sql("SELECT SUBSTRING(TIME,-5,2) as time FROM df")
t1=summarize(groupBy(t, t$time), count = n(t$time))
t2=arrange(t1, asc (t1$time))
t3=as.data.frame(t2)
plot(t3,type='b')
barplot(t(t3))

可见,10点以后进入搜索的高峰期,一直持续到午夜。


在大数据的时代背景下,Spark支持R API对熟悉R语言的数据科学家来说是一个利器。更多关于SparkR的资料,可以参考官方网站:http://spark.apache.org/docs/latest/sparkr.html。

在下一篇《用SparkR探索电商数据(二)》的文章中,我们将贴上机器学习的案例。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值