Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 处理多个';行';在apache spark RDD中_Apache Spark_Rdd - Fatal编程技术网

Apache spark 处理多个';行';在apache spark RDD中

Apache spark 处理多个';行';在apache spark RDD中,apache-spark,rdd,Apache Spark,Rdd,我对Spark很陌生,我有一个问题 我试图用一些数据做一个简单的情绪分析。 在数据文件中,每一行都包含一个产品回顾 以下是我处理一行的代码: // wordlist val pos_file = "/user/cloudera/Data/pos_list.txt" val neg_file = "/user/cloudera/Data/neg_list.txt" val pos_words = sc.textFile(pos_file).cache().collect().toSet val

我对Spark很陌生,我有一个问题

我试图用一些数据做一个简单的情绪分析。 在数据文件中,每一行都包含一个产品回顾

以下是我处理一行的代码:

// wordlist
val pos_file = "/user/cloudera/Data/pos_list.txt"
val neg_file = "/user/cloudera/Data/neg_list.txt"

val pos_words = sc.textFile(pos_file).cache().collect().toSet
val neg_words = sc.textFile(neg_file).cache().collect().toSet


val test_string = "Line with positive or negative review."
val test_rdd = sc.parallelize(List(test_string))

val test_rdd2 = test_rdd.flatMap(line => "[a-zA-Z]+".r findAllIn line map (_.toLowerCase) )

val pos = test_rdd2.filter(x => pos_words contains x)
val neg = test_rdd2.filter(x => neg_words contains x)
我现在的问题是如何处理rdd中的每条记录(在本例中为3):

下面的代码

val reviews2 = reviews.flatMap(line => "[a-zA-Z]+".r findAllIn line map (_.toLowerCase))
给我所有的话。 我想得到每行/评论的pos和neg值。 计算非常简单:如果一个单词在一组pos_单词/neg_单词中,那么将它放在pos/neg中。事实上,我只是计算积极或消极词语的出现次数

如何获得类似('line','posvalue','negvalue')的内容


非常感谢您提前

尝试总结一下这个问题:我们希望在输入文件的每一行“规范化”后计算某些单词(正数、负数)的出现次数:所有字母字符和小写空格

让我们假设我已经有了两组积极和消极的词:

val posWords: Set[String] = ???
val negWords: Set[String] = ???
和一个每行有1条记录的输入文件:

val data = sc.textFile("data.txt")
我们需要表格的结果:

(text, posCount, negCount)
我们首先定义一个helper函数,该函数允许我们计算字符串序列中的单词与一组字符串的匹配:

def matches(text:Seq[String], words:Set[String]):Int =
text.map(w => if (words.contains(w)) 1 else 0).sum 
最后,我们将每一行转换为正匹配和负匹配的计数

val posNegData  = data.map{line => 
    val cleanLine = line.toLowerCase.split("\\W")
    (line, matches(cleanLine, posWords), matches(cleanLine, negWords))
}

这里我们假设预期的结果是具有正匹配和负匹配的原始字符串。(这与原来的问题不清楚)

review2中的那一行将给出一行中的所有单词,而不是累积的pos/neg值。不确定你的分数应该如何计算。你能更新你的例子吗?是的,你是对的。如果我加载一个文本文件,文本文件中的每一行都是一个评论。我想得到每行/评论的pos和neg值。计算非常简单:如果一个单词在一组pos_单词/neg_单词中,那么将它放在pos/neg中。事实上,我只是计算积极或消极词语的出现次数。我的问题是reviews2保存了所有评论的字数,所以我无法计算一行的字数。
val posNegData  = data.map{line => 
    val cleanLine = line.toLowerCase.split("\\W")
    (line, matches(cleanLine, posWords), matches(cleanLine, negWords))
}