搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 数据开放资源 > Scala版Spark简单商品统计程序教程--逐行精讲

Scala版Spark简单商品统计程序教程--逐行精讲

数据开放资源 2019-02-12
举报


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简单商品统计程序教程--逐行精讲》的版权归原作者「数据开放资源」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报