java - JavaRDD 等价于 GROUP BY
问题描述
我有一个包含以下列(Accident_Id、Date、Area)和数百行的 CSV 数据集。我想要实现的是按区域列分组到可能的唯一组中并找到每个组的计数。
我知道如何用 SQLContext 做到这一点,但我不确定它是如何用 JavaRDD 实现的,它的动作(map、reduce 等......)
SparkConf conf = new SparkConf().setAppName("test").setMaster("local[2]");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> data = sc.textFile(pathToCSV);
...
sqlContext.sql("SELECT COUNT(Area) FROM my_table GROUP BY Area").show();
解决方案
您可以简单地制作一对 RDD 并使用它来按其键进行计数。
以下只是假设一个带有逗号分隔记录的字符串 RDD:
Map<String, Long> areaCounts =
data.mapToPair(s -> new scala.Tuple2<>(s.split(",")[2], 1L)).countByKey();
这会给你area -> count
地图。
如果您更喜欢手动实现归约逻辑,可以使用reduceByKey
:
Map<String, Long> areaCounts =
data.mapToPair(s -> new scala.Tuple2<>(s.split(",")[2], 1L))
.reduceByKey((l1, l2) -> l1 + l2).collectAsMap();
推荐阅读
- python-3.x - 带有 Flask 运行时错误的 Python 3:“AttributeError: module 'hmac' has no attribute 'digest'”在 Linux 但不是 Windows
- node.js - 服务器和客户端上的不同元标记是否重要?反应 SSR
- sql-server - 如何为字符串中两个分隔符之间的每个字符生成单独的行
- ios - 以编程方式使用 UIPickerView 文本设置 UITextField 文本
- c - 为 C 使用 AMPL C++ API?
- c - 什么时候应该使用静态内存分配,什么时候应该使用动态内存分配?
- kotlin - “无法使用 JDBC 执行 DbAction.DeleteRoot”?
- javascript - 为对象文字reactjs中的不同键分配相同的值
- vb.net - 如何在图表上显示所有 x 轴值的标签
- php - php远程下载多张图片并裁剪