为文本文件中的每个记录创建正/负计数矩阵

时间:2015-12-18 10:24:07

标签: scala apache-spark

我正在尝试使用Apache Spark(使用Scala)中的一组正面和负面词来对某些评论数据进行一些情绪分析。我是Scala的新手,所以需要一些帮助。该计划如下:

读取RDD中的正/负。

val pos_words = sc.textFile("D:/spark4/mydata/pos-words.txt")
val neg_words = sc.textFile("D:/spark4/mydata/neg-words.txt")

将评论读入RDD

val dataFile = sc.textFile("D:/spark4/mydata/review_data.txt")
val reviews = dataFile.map(_.replaceAll("[^a-zA-Z\\s]", "").trim().toLowerCase())

将评论平面化为单个单词

val words = reviews.flatMap(_.split(" "))

现在有一种方法可以在单词RDD的Map函数中使用pos_words和neg_words,并为Review RDD的每条记录分配所有正面单词和负面单词的计数。

所需的输出将是

<Review Text 1>,<#PosWordCount>,<#NegWordCount>

xxxxxxxxxxxxxx,20,10

yyyyyyyyyyyyyy,5,30

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

为此,您需要将正面和负面词典分发给群集中的所有执行程序。想要小而且适合记忆。我假设您的评论可能是一个更大的RDD,您想要分发。所以:

  1. 通过pos_words.collect().asSet将您的词典提取到一个集合。
  2. 转换为广播变量。 Docs here.
  3. 构建一个小的,正常的Scala函数,该函数需要检查和2组,迭代所有单词并保持正数和负数的计数。返回所需的元组。这是基本的编程。
  4. 使用reviews.map(f)
  5. 将您的功能用于所有评论 祝你好运!