scala - Scala 在结果中重复排序
问题描述
我有一个包含“客户”、“花费金额”的 RDD。我正在尝试按“Amt Spent”进行简单的排序。当我查看结果时,我看到多个排序发生。
我的代码:
val sc = new SparkContext("local[*]", "TotalSpentByCustomerSorted") val input = sc.textFile("filename.csv") val input2 = input.map(line=>line.split(",")).map( line=>(line(0).toInt,line(2).toFloat) ) // To fetch only customer#, Amt spent val input3 = input2.reduceByKey((x,y)=>(x+y)).sortBy(x=>x._2) input3.foreach(println)
结果:
(28,5000.7104) (22,5019.449) (29,5032.5303) (17,5032.6797) (60,5040.7095) (45,3309.3804) (79,3790.5698) (96,3924.23) (23,4042.65) (99,4172.29)
从结果中可以看出,前 5 个条目按 Amt 花费排序,然后再次发生排序。这里可能是什么问题?
解决方案
问题不在于 sorted 确实有效,而是您在RDDprintln()
上调用了inside a - 该操作是在所有分区上并行执行的。
而且,在真正的集群上(不是在本地开发环境中),您甚至不会看到打印的行,因为这些会发生在执行程序的JVMs上。foreach
RDD已排序,但如果您不想相信我(那会很聪明),那么您可以collect
在它们的顺序)。foreach
推荐阅读
- ios - UIImageView tintColor 设置,无论如何都不对图像应用颜色
- r - 更改 Shiny tableOutput 中的字体颜色
- html - 聚焦/不聚焦时过渡不起作用
- sql - 如何计算一对跨列SQL出现的次数
- android - 如何撤消 android SQLite 中的删除操作
- java - JavaFX - 无法将对象强制转换为 SimpleListProperty
- kubernetes - 通过 RBAC 限制对 Kubernetes 机密的访问
- javascript - 如果从 localhost 执行 window.name 将失去其价值
- three.js - 如何使用 Quickhull 将两个几何图形与 Three.js 相加?
- javascript - setState 的值传递给函数,直到第二个 onPress