Scala版Spark简单商品统计程序教程--逐行精讲
Posted 数据开放资源
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala版Spark简单商品统计程序教程--逐行精讲相关的知识,希望对你有一定的参考价值。
John,iPhone Cover,9.99
John,Headphones,5.49
Jack,iPhone Cover,9.99
Jill,Samsung Galaxy Cover,8.95
Bob,iPad Cover,5.49
第一列人名,第二列商品名,第三列价格。
每行代表一个订单记录,把他们复制到一个csv文件,或者txt啥的随意了2333,放在代码中的路径下:
全部代码如下:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
object MyTest{
def main(args: Array[String]) {
//local[4]可以认为是把数据分为4个块,单机的话,可以理解为放在进程的不同线程下
//这样就可以并行计算啦,sparkcontext可以认为是一个必备的初始化。
val sc = new SparkContext("local[4]", "My Test Code")
//这句话是把数据读入,然后转化成一个三元组的数据格式。
//testFile是通过刚刚初始化的sc读取相应数据,=>可以认为是一个函数,左边代表输入,右边表
//对输入进行这样的操作,map的意思就是对所有输入都进行这样的操作。
//第二行翻译过来就是,以“,”位分割符,把每一行分隔成字符串。
//同理,第三行翻译过来就是,把第一列,第二列,第三列打包成一个元组。
val data = sc.textFile("./src/main/scala/ma/purchas.csv")
.map(line => line.split(","))
.map(purchaseRecord => (purchaseRecord(0), purchaseRecord(1), purchaseRecord(2)))
//这里就是简单的计数,统计一共有多少条,这句话是计算订单总数的
val numPurchases = data.count()
//case是scala语言模式匹配的关键字,意思是符合(user, product, price)这样条目,转化为user,
//然后去重,最后计数,这句话是计算有多少不同用户的。
val uniqueUsers = data.map { case (user, product, price) => user }.distinct().count()
//这里多了一个price.toDouble,就是转化为浮点数啦,因为后面要求平均,为了精确,这句话是计算总
//收入的
val totalRevenue = data.map { case (user, product, price) => price.toDouble }.sum()
//z这一句比较酸爽23333,功能是要计算最畅销的产品,
//首先map一行,就是把匹配的元素,转化为后面的形式,包括产品名和1,因为每个订单代表购买一次嘛
//resuceByKey,就是把上一步map的key-value值,通过key相加,也就是这个产品有几个订单,value
//就是几啦
//collect,库函数,返回所有元素
//sortBy函数说白了就是根据括号里的要求排序23333,所以括号里面-_._2是啥?2333
//-号代表取负值,作用后面再说
//第一个_代表上一步collect返回的数据集合
//后面._2是个语法糖,代表上一步RDD第二列的元素,233333
//所以前面-可以把大正值变成负值返回,从而可以从大到小排序,因为越大正数对应的负值越小嘛。
val productsByPopularity = data
.map { case (user, product, price) => (product, 1) }
.reduceByKey(_ + _)
.collect()
.sortBy(-_._2)
println("Total purchases: " + numPurchases)
println("Unique users: " + uniqueUsers)
println("Total revenue: " + totalRevenue)
println("Most popular product: %s with %d purchases".format(productsByPopularity(0)._1, productsByPopularity(0)._2))
sc.stop()
}
来源:CSDN
原文:https://blog.csdn.net/beijixiong5622/article/details/84993338
-END-
ID:coreplatform
■ 中国数据资源开放平台
■ 让数据流通更可信、高效、安全
以上是关于Scala版Spark简单商品统计程序教程--逐行精讲的主要内容,如果未能解决你的问题,请参考以下文章
[Spark/Scala] 180414|大数据实战培训 Spark大型项目实战:电商用户行为分析大数据平台 大数据视频教程