【问题标题】:Counting Words while including special characters and disregarding capitilization in Pyspark?在 Pyspark 中包括特殊字符和忽略大写字母的情况下计算单词?
【发布时间】:2020-02-22 00:19:31
【问题描述】:

我正在做一个小项目来理解 PySpark,我正在尝试让 PySpark 对 txtfile 中的单词执行以下操作;它应该“忽略”单词大小写的任何变化(即,While vs while),并且它应该“忽略”单词末尾可能出现的任何其他字符(即橙色与橙色,橙色与橙色? ) 并将它们都算作同一个词。

我相当肯定某种 lambda 函数或正则表达式是必需的,但我不知道如何将它概括到可以弹出任何类型的文本文件(如一本书)并让它吐回正确的分析。

到目前为止,这是我的代码:

import sys

from pyspark import SparkContext, SparkConf

input = sc.textFile("/home/user/YOURFILEHERE.txt")
words = input.flatMap(lambda line: line.split(" "))
wordCounts = words.map(lambda word: (word, 1)).reduceByKey(lambda a,b:a +b)
wordCounts.collect() 

我需要做的最后一件事是对单词进行频率分析(即“While”这个词出现 80% 的时间),但我相当确定如何做到这一点,目前正在将其添加到我现在拥有的;我只是在大小写和特殊字符包含方面遇到了很多问题。

在这个问题上的任何帮助,即使只是指导也会很棒。谢谢各位!

【问题讨论】:

    标签: python pyspark


    【解决方案1】:

    只需将输入替换为您的文本文件,关键是函数word_munge

    import string
    import re
    def word_munge(single_word):                                                                                                                               
        lower_case_word=single_word.lower()                                                                                                                    
        return re.sub(f"[{re.escape(string.punctuation)}]", "", lower_case_word)
    
    input_string="While orange, while orange while orange." 
    input_rdd = sc.parallelize([input_string])                                                                                                                  
    words = input_rdd.flatMap(lambda line: line.split(" "))
    (words.
     map(word_munge).
     map(lambda word: (word, 1)).
     reduceByKey(lambda a, b: a+ b)
    ).take(2)                                                
    
    

    【讨论】:

    • 添加文本文件返回错误“异常:您似乎正在尝试广播 RDD 或从操作或转换中引用 RDD。RDD 转换和操作只能由驱动程序调用,不在其他转换内部;例如,rdd1.map(lambda x: rdd2.values.count() * x) 无效,因为无法在 rdd1.map 转换内部执行值转换和计数操作。有关更多信息,见 SPARK-5063。”
    • 你能粘贴你的代码,告诉我你是如何读取输入文件的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2021-11-05
    • 2019-08-11
    相关资源
    最近更新 更多