spark scala:计数发生键-对值

时间:2018-10-22 22:49:08

标签: scala apache-spark apache-spark-sql

我是Scala的新手,需要帮助来弄清楚如何计算密钥对值的出现。我有一个输入文本文件,如下所示:

a: b
b: c
c: a,b,d
d: b,c
e: b

我想计算每个值的出现,所以应该是这样:

a | b | c| d| e| 
0   4   2  1  0

我当时想做的是将每一行和每个键,值对拆分成这样:

a,b
b,c
c,a
c,b
c,d
d,b
d,c
e,b

,然后根据相同的键进行计数。

到目前为止,我有:

val links = sc.textFile("input.txt")
 val test = links.flatMap(line => line.split(":").map(row => row.split("\\s+")

感谢您对我下一步能做什么或参考的任何想法的感谢。

1 个答案:

答案 0 :(得分:1)

您可以阅读文件:

val df = spark.read.option("delimiter", ":").csv("/path/to/file").toDF("key", "value")

拆分记录

import org.apache.spark.sql.functions._

val long = df.withColumn("value", explode(split(trim($"value"), ",")))

然后合计

long.groupBy("value").count.show

或旋转

long.groupBy().pivot($"value").count.show