在Scala中创建包含字符串对计数的共现矩阵

时间:2018-10-24 22:58:24

标签: scala apache-spark

我有一个文本文件,我想将其转换为共现矩阵。我已经将文件拆分为标记,并使用组合来获取单词对及其计数的列表。我是这样的:

val logData = sc.textFile(input_file, 2).cache()
val tokens = logData.map(_.split(" ").toList)
val coo = tokens.flatMap(_.combinations(2)).map((_, 1)).reduceByKey(_ + _) 

我得到以下输出:

(List(garb, personae),1)
(List(chasm, dream),3)
(List(grandfathers, adulthood),1)
(List(dr, till),2)
(List(those, winds),1)

现在,我想将其转换为稀疏矩阵,所有唯一的单词都作为行和列,而计数作为值。像这样:

          garb personae chasm dream ...
garb      0    1        0     0
personae  1    0        0     0
chasm     0    0        0     3
dream     0    0        3     0
...

据我了解,我可以先将字符串转换为索引,然后使用Spark的mllib创建坐标矩阵。但是,在研究了文档之后,我陷入了困境,对此一无所获。

0 个答案:

没有答案