习题 15:读取后排序
题目:编写 Spark 代码读取指定目录下的 15.csv
文件。每行按逗号分割,过滤字段总数不足 4
列的脏数据;将第三列转为浮点型作为排序
key,执行降序排序;第三列相同时按第四列排序,并输出所有列。
15.csv:
col1,col2,col3,col4
A,1,3.5,X
B,2,2.1,Y
C,3,3.5,A
D,4,1.0,Z
import org.apache.spark.{SparkConf, SparkContext}
object CsvSortExample {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("CsvSort").setMaster("local[*]")
val sc = new SparkContext(conf)
val lines = sc.textFile("15.csv")
val sortedResult = lines
.map(line => line.split(",", -1))
.filter(fields => fields.length >= 4)
.map { fields =>
val key3 = fields(2).toDouble
val key4 = fields(3)
(key3, key4, fields)
}
.sortBy({ case (k3, k4, _) => (k3, k4) }, ascending = false)
.map(_._3.mkString(","))
sortedResult.take(20).foreach(println)
sc.stop()
}
}