首页 > 解决方案 > 在 Scala 中聚合数据

问题描述

我在一个文件中有数据,例如:

2005, 08, 20, 50
2005, 08, 21, 52
2005, 08, 22, 38
2005, 08, 23, 70

数据为:年、月、日、温度。

我想读取这些数据并输出数据年和月的温度。示例:2015-08:38、50、52、70。温度按升序排序。

同样的火花scala代码应该是什么?RDD 转换中的答案将不胜感激。到目前为止,我已经这样做了:

val conf= new SparkConf().setAppName("demo").setMaster("local[*]")
    val spark = new SparkContext(conf)
    val input = spark.textFile("src/main/resources/someFile.txt")
    val fields = input.flatMap(_.split(","))

我在想的是,将年月作为键,然后将温度列表作为值。但是我无法将其放入代码中。

标签: scalaapache-spark

解决方案


从文件

 val filesRDD = sc.textFile("/FileStore/tables/Weather2.txt",1) 
 val linesRDD = filesRDD.map(line => (line.trim.split(","))).map(entries=>(entries(0).toInt,entries(1).toInt,entries(2).toInt,entries(3).toInt)) 
 linesRDD.sortBy(_._4).collect

返回:

res13: Array[(Int, Int, Int, Int)] = Array((2005,7,22,7), (2005,7,15,10), (2005,8,22,38), (2005,8,20,50), (2005,7,19,50), (2005,8,21,52), (2005,7,21,52), (2005,8,23,70))

您可以自己考虑 concat,如果排序值很常见怎么办?多种,但我认为这回答了你的第一个格式不太好的问题。


推荐阅读