我是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+")
感谢您对我下一步能做什么或参考的任何想法的感谢。
答案 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