【问题标题】:Apache Spark Enron DataSetApache Spark 安然数据集
【发布时间】:2020-04-28 08:44:43
【问题描述】:

我正在尝试分析 apache spark 上的 Enron DataSet。我想从中提取电子邮件。 首先使用以下函数创建和rdd:

def utf8_decode_and_filter(rdd):
    def utf_decode(s):
        try:
            return str(s, 'utf-8')
        except:
            pass
    return rdd.map(lambda x: utf_decode(x[1])).filter(lambda x: x != None)

用火花序列调用上述函数

data = utf8_decode_and_filter(sc.sequenceFile('/user/ufac001/project1920/samples'))

当我这样做时:

data.collect()

我可以将数据视为员工之间带有电子邮件的字符串列表。我猜这是一个字符串列表

现在提取三组电子邮件。我写了以下函数:

def xml_to_emails(s):
    print(s)
    emailed = []

    return s

rdd = data.flatMap(lambda x: xml_to_emails(x)).map(lambda word: (word, 1)).reduceByKey(lambda a,b:a+b)

我的问题是首先我无法提取电子邮件,因为在 xml_to_email 函数中,当我在 rdd 上运行 collect 时,print(s) 不输出任何内容,我可以打印一个带有字母和数字的元组。

如何从这个 rdd 中提取电子邮件?

请客气,我是 spark 的新手

【问题讨论】:

    标签: python apache-spark pyspark rdd


    【解决方案1】:

    找到这样的解决方案并在平面地图中使用地图

    import re
    
    def xml_to_emails(s):
        emailed = []
        FromEmail =re.search('From: (.*)\n', s).group(1).replace("\r","")#Can never be null
    
        #check if 
        fromemail=""
        fromDomain = FromEmail.split('@')[1]
        if "enron" in fromDomain:
            fromemail =FromEmail
    
        Date = re.search('Date:(.*)',s).group(1).replace("\r","") #can never be null
    
    
    
        ToEmail= re.search('To:(.*)',s).group(1).replace("\r","")#can never be null
    
        toemail=""
        toDomain = ToEmail.split('@')
        if len(toDomain)>1:
            if "enron" in toDomain[1]:
                toemail =ToEmail
    
    
        CCEmail = re.search('Cc:(.*)',s)#can be null
        if CCEmail is not None:
            CCEmail=CCEmail.group(1).replace("\r","")
    
        BCCEmail = re.search('Bcc:(.*)',s)#can be null
    
        if BCCEmail is not None:
            BCCEmail=BCCEmail.group(1).replace("\r","")
        return (fromemail,(toemail,CCEmail,BCCEmail),Date)
    
    data = rdd.map(lambda x: xml_to_emails(x))#.map(lambda word: (word, 1)).reduceByKey(lambda a,b:a+b)
    

    我能够提取电子邮件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 2023-03-08
      • 2017-09-22
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多