Apache spark Spark中字的过滤和计数过程中的错误
我想定义5个单词,并根据这17个单词过滤我的数据集,并计算出现的次数。 假设Apache spark Spark中字的过滤和计数过程中的错误,apache-spark,Apache Spark,我想定义5个单词,并根据这17个单词过滤我的数据集,并计算出现的次数。 假设 words = ['dog', 'cat','tiger','lion','cheetah'] 我有一个文本文件,其中包含超过2000行的句子。我想搜索我的文本文件,并返回出现的次数 我在网上搜索了一些代码,比如 val filePath = sc.text_file("/user/cloudera/input/Hin*/datafile.txt") val crimecounts = filePath.
words = ['dog', 'cat','tiger','lion','cheetah']
我有一个文本文件,其中包含超过2000行的句子。我想搜索我的文本文件,并返回出现的次数
我在网上搜索了一些代码,比如
val filePath = sc.text_file("/user/cloudera/input/Hin*/datafile.txt")
val crimecounts =
filePath.
flatMap(line=>line.split(" ")).
filter(w => (w =="dog") || (w == "lion")).
map(word=>(word, 1)).
reduceByKey(_ + _)
此代码返回错误的“lion”计数。令人惊讶的是,只返回了“狮子”的计数。我已经分别使用Python代码检查了计数值的正确性。如何更正代码,以便返回所有5个单词的正确计数。
数据子集如下所示:
那是一个炎热的夏日。一头狮子和一头野猪来到一个小水域喝水。狮子和野猪开始争论谁应该先喝酒。过了一会儿,当他们注意到上面的秃鹫时,他们累了,停下来喘口气。很快,他们意识到秃鹫正在等待它们中的一个或两个倒下,以饱餐一顿。狮子和野猪于是决定,最好是和好,成为朋友,而不是打架,成为秃鹫的食物。狮子和野猪一起喝水,然后继续前进
我是一个新手。在这方面有人能帮我吗 您的代码中有太多错误。数组创建部分似乎在pyspark中,但其余代码似乎在scala中。而且sparkContext实例没有文本文件api pyspark的解决方案:
words = ['dog', 'cat','tiger','lion','cheetah']
filePath = sc.textFile("/user/cloudera/input/Hin*/datafile.txt")
from operator import add
crimecounts = filePath.flatMap(lambda line: line.split(" ")).filter(lambda w: w.lower() in words).map(lambda word: (word, 1)).reduceByKey(add)
scala的解决方案:
val words = Array("dog","cat","tiger","lion","cheetah")
val filePath = sc.textFile("/user/cloudera/input/Hin*/datafile.txt")
val crimecounts = filePath.flatMap(line => line.split(" ")).filter(w => words.contains(w.toLowerCase)).map(word => (word, 1)).reduceByKey(_ + _)
你的代码中有很多错误。数组创建部分似乎在pyspark中,但其余代码似乎在scala中。而且sparkContext实例没有文本文件api pyspark的解决方案:
words = ['dog', 'cat','tiger','lion','cheetah']
filePath = sc.textFile("/user/cloudera/input/Hin*/datafile.txt")
from operator import add
crimecounts = filePath.flatMap(lambda line: line.split(" ")).filter(lambda w: w.lower() in words).map(lambda word: (word, 1)).reduceByKey(add)
scala的解决方案:
val words = Array("dog","cat","tiger","lion","cheetah")
val filePath = sc.textFile("/user/cloudera/input/Hin*/datafile.txt")
val crimecounts = filePath.flatMap(line => line.split(" ")).filter(w => words.contains(w.toLowerCase)).map(word => (word, 1)).reduceByKey(_ + _)
你能用一小部分数据重现这个问题吗?使用此代码得到的计数是多少?另外,您使用的是Python还是Scala?我使用的是spark shell。我擅长Python,因此我通过
file.read().lower(),并使用count()函数构建了一个测试正确性的代码。我通过编辑添加了数据子集。我得到的Lion count为2,而数据的小子集本身的Lion count为4。您将其标记为pyspark,但同时使用了scala和pyspark代码。请验证我看不到任何Python代码-为什么它被标记为pyspark
?@desertnaut我是Spark的新手,所以我不知道哪个标记合适。你能用一小部分数据重现这个问题吗?使用此代码得到的计数是多少?另外,您使用的是Python还是Scala?我使用的是spark shell。我擅长Python,因此我通过file.read().lower(),并使用count()函数构建了一个测试正确性的代码。我通过编辑添加了数据子集。我得到的Lion count为2,而数据的小子集本身的Lion count为4。您将其标记为pyspark,但同时使用了scala和pyspark代码。请验证我看不到任何Python代码-为什么这个标签被标记为pyspark
?@desertnaut我是Spark的新手,所以我不知道哪个标签合适谢谢你的回答。我还有两个疑问。请不要犹豫回答。假设,如果还有59个这样的文件,我想对所有文件中的每个单词进行合并计数,我该怎么做呢?另一个问题是,当我从文件中读取数据时,如何使其不区分大小写并运行该文件?从您的命令中,感谢您,不会出现任何错误。但是正在生成一个空的RDD。我已经交叉检查了HDFS中是否存在数据。我正在使用Cloudera发行版的Quickstart VM,因此我想它已经设置好了。当我尝试在PySpark中打印文件时,所有单词都以“\xa0”作为前缀,我想这与编码有关。这会导致任何问题吗?回答你的问题:1)你只需要给出目录路径,里面的所有文件都会被读取。2) 您可以将所有单词改为小写或使用igoreCase()。3) hadoop配置和将其链接到spark时出现了问题。4) 文本文件中可能有一些符号。谢谢您的回答。我还有两个疑问。请不要犹豫回答。假设,如果还有59个这样的文件,我想对所有文件中的每个单词进行合并计数,我该怎么做呢?另一个问题是,当我从文件中读取数据时,如何使其不区分大小写并运行该文件?从您的命令中,感谢您,不会出现任何错误。但是正在生成一个空的RDD。我已经交叉检查了HDFS中是否存在数据。我正在使用Cloudera发行版的Quickstart VM,因此我想它已经设置好了。当我尝试在PySpark中打印文件时,所有单词都以“\xa0”作为前缀,我想这与编码有关。这会导致任何问题吗?回答你的问题:1)你只需要给出目录路径,里面的所有文件都会被读取。2) 您可以将所有单词改为小写或使用igoreCase()。3) hadoop配置和将其链接到spark时出现了问题。4) 文本文件中可能有一些符号。