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简单商品统计程序教程--逐行精讲的主要内容,如果未能解决你的问题,请参考以下文章

教程 | 写给Python程序员的Scala入门教程

[Spark/Scala] 180414|大数据实战培训 Spark大型项目实战:电商用户行为分析大数据平台 大数据视频教程

使用 Spark 和 Scala 进行字数统计

spark HelloWorld程序(scala版)

Scala配置和Spark配置以及Scala一些函数的用法(附带词频统计实例)

2020.2.2