数据处理
- 源数据样例
1010,华语剧场|剧情|当代|类型,1,0 需求
1010,华语剧场|剧情|当代|类型,1,0
数据格式说明:
id,关键字组合,使用的是|分割符,是否展示(0未展示,1展示),点击(0未点击,1点击))要求输出:1010 关键字 展示量 点击量
输出示例:1010 华语剧场 3 2- 代码实现
import scala.collection.mutable
import scala.io.Source
import scala.util.control.Breaks._
import scala.collection.mutable.Map
/**
*
1010,华语剧场|剧情|当代|类型,1,0
数据格式说明:
id,关键字组合,使用的是|分割符,是否展示(0未展示,1展示),点击(0未点击,1点击))
要求输出:1010 关键字 展示量 点击量
输出示例:1010 华语剧场 3 2
说明:
读取文件的代码:
val lines: Iterator[String] = Source.fromFile("impclick.txt").getLines()
分词时,需要进行转义 \\| [|] | 分不出来结果
*/
object HomeWork extends App {
//
val lines: Iterator[String] = Source.fromFile("D:\\scalaStudy\\day-03\\作业\\impclick.txt").getLines()
//将获取到的数据切分并压平
lines.toArray.flatMap({
t =>
val arr = t.split(",")
val id = arr(0)
val keys = arr(1)
val glance = arr(2)
val click = arr(3)
keys.split("\\|").map({
key =>
//迭代返回一个元组
((id,key),glance.toInt,click.toInt)
})
}).toList.groupBy({
t =>
//以id和key分组
t._1
}).map({
t =>
//求点击量和浏览量
val glance:Int = t._2.map(t => t._2).sum
val click = t._2.map(t => t._3).sum
(t._1._1,t._1._2,glance,click)
})//排序
.toList.sortBy(t => -t._3)
//打印
.foreach(println)
}