Spark Scala 值的唯一键总和
Spark Scala sum of values by unique key
如果我有危及项目(键)和销售额(值)的键值对:
bolt 45
bolt 5
drill 1
drill 1
screw 1
screw 2
screw 3
所以我想获得一个 RDD,其中每个元素都是每个唯一键的值的总和:
bolt 50
drill 2
screw 6
我现在的代码是这样的:
val salesRDD = sc.textFile("/user/bigdata/sales.txt")
val pairs = salesRDD.map(s => (s, 1))
val counts = pairs.reduceByKey((a, b) => a + b)
counts.collect().foreach(println)
但我的结果是这样的:
(bolt 5,1)
(drill 1,2)
(bolt 45,1)
(screw 2,1)
(screw 3,1)
(screw 1,1)
我应该如何编辑我的代码以获得上述结果?
Java 方式,希望你能把它转换成scala。看起来你只需要一个 groupby 和 count
salesRDD.groupBy(salesRDD.col("name")).count();
+-----+-----+
| name|count|
+-----+-----+
| bolt| 50|
|drill| 2|
|screw| 6 |
+-----+-----+
此外,
请使用数据集和数据帧而不是 RDD。你会发现它非常方便
如果我有危及项目(键)和销售额(值)的键值对:
bolt 45
bolt 5
drill 1
drill 1
screw 1
screw 2
screw 3
所以我想获得一个 RDD,其中每个元素都是每个唯一键的值的总和:
bolt 50
drill 2
screw 6
我现在的代码是这样的:
val salesRDD = sc.textFile("/user/bigdata/sales.txt")
val pairs = salesRDD.map(s => (s, 1))
val counts = pairs.reduceByKey((a, b) => a + b)
counts.collect().foreach(println)
但我的结果是这样的:
(bolt 5,1)
(drill 1,2)
(bolt 45,1)
(screw 2,1)
(screw 3,1)
(screw 1,1)
我应该如何编辑我的代码以获得上述结果?
Java 方式,希望你能把它转换成scala。看起来你只需要一个 groupby 和 count
salesRDD.groupBy(salesRDD.col("name")).count();
+-----+-----+
| name|count|
+-----+-----+
| bolt| 50|
|drill| 2|
|screw| 6 |
+-----+-----+
此外, 请使用数据集和数据帧而不是 RDD。你会发现它非常方便