apache-spark - Spark TopK 如何解决这个问题?
问题描述
我有一个关于 TopK 的问题需要使用 Spark 来解决。
源文件是这样的:
baoshi,13
xinxi,80
baoshi,99
xinxi,32
baoshi,50
xinxi,43
baoshi,210
xinxi,100
这是我的代码:
import org.apache.spark.{SparkConf, SparkContext}
object TopKTest {
def main(args: Array[String]): Unit = {
val file = "file:///home/hadoop/rdd-test/TopK3.txt"
val conf = new SparkConf().setAppName("TopKTest").setMaster("local")
val sc = new SparkContext(conf)
val txt = sc.textFile(file)
val rdd2 =txt.map(line=>(line.split(",")(0)
,line.split(",")(1).trim))
val rdd=rdd2.groupByKey()
val rdd1 = rdd.map(line=> {
val f = line._1
val s = line._2
val t = s.toList.sortWith(_ > _).take(2)
(f, t)
})
rdd1.foreach(println)
}
}
预期结果是:
(xinxi,List(100, 80))
(baoshi,List(210, 99))
解决方案
那是因为你比较的Strings
不是数字。
改变
val rdd2 =txt.map(line=>(line.split(",")(0)
,line.split(",")(1).trim))
至
val rdd2 =txt.map(line=>(line.split(",")(0)
,line.split(",")(1).trim.toLong))
推荐阅读
- react-native - 警报显示消息而不按警报按钮
- python - 如何在pyqt(QGIS)中捕获QDockWidget的KeyPressedEvent
- android - 使用设备所有者将系统应用设置为锁定任务包
- html - 如何使用整个 SVG
- solidity - 这两个值之间的区别?
- javascript - Highchart:折线图未在屏幕上从数据库加载数据
- java - 如何使用 ConstraintLayout 管理具有布局的自定义视图的宽度?
- php - PHP/Laravel 看起来在进行肥皂调用时我们没有 XML 文档
- batch-file - 从自身的其他实例调用函数/脚本
- docker - docker-compose 文件无法从私有 nexus 存储库下载 maven 依赖项