我想在scala中找到此查询的不同值
select
key,
count(distinct suppKey)
from
file
group by
key ;
我在scala中编写此代码,但没有工作。
val count= file.map(line=> (line.split('|')(0),line.split('|')(1)).distinct().count())
我进行拆分,因为key位于文件的第一行,而suppkey位于第二行。
文件:
1|52|3956|337.0
1|77|4069|357.8
1|7|14|35.2
2|3|8895|378.4
2|3|4969|915.2
2|3|8539|438.3
2|78|3025|306.3
预期产出:
1|3
2|2
答案 0 :(得分:1)
为了简化测试,我使用String:
而不是文件scala> val s="""1|52|3956|337.0
| 1|77|4069|357.8
| 1|7|14|35.2
| 2|3|8895|378.4
| 2|3|4969|915.2
| 2|3|8539|438.3
| 2|78|3025|306.3"""
scala> s.split("\n").map (line => {val sp = line.split ('|'); (sp(0), sp(1))}).distinct.groupBy (_._1).map (e => (e._1, e._2.size))
res198: scala.collection.immutable.Map[String,Int] = Map(2 -> 2, 1 -> 3)
Imho,我们需要一个groupBy来指定要分组的内容,并按分组计算。
答案 1 :(得分:1)
完成火花REPL。 test.txt是包含您提供的文本的文件
val d = sc.textFile("test.txt")
d.map(x => (x.split("\\|")(0), x.split("\\|")(1))).distinct.countByKey
scala.collection.Map[String,Long] = Map(2 -> 2, 1 -> 3)