如何使用PySpark解析大型邮箱文件

时间:2019-06-28 00:53:52

标签: python apache-spark parsing pyspark pyspark-sql

说我有一个 Unix邮箱文件(*。mbox)太大,以至于我不可能希望一次将它全部装入内存,并且我不想处理破坏它的问题。 ,任务计划和取消,故障恢复等。

我认为最好使用 Apache Spark 来完成此任务,并编写Python程序使其易于重复。

我知道最好的解决方案是以某种方式使用Python社区可用的许多出色的MBOX文件解析器之一,但是我如何将该工作提交到Spark集群?

以下是无效的代码,但我希望它可以帮助实现我的最终目标。

import email
from pyspark.sql import SparkSession
from pyspark.sql import Row
from pyspark.sql import functions
import re 

# a python function that separates the mbox files into separate 
# emails using a regex to read the first line of each email
def transformData(x):
    indices = [m.start() for m in re.finditer('From [0-9]+@xxx', x)]
    return [x[i:j] for i, j in zip(indices, indices[1:]+[None])]

spark = SparkSession.builder
             .master("spark://localhost:7077")
             .appName("EmailParser")
             .getOrCreate()

inbox = spark.sparkContext.textFile(    
             "file:///C:/Users/baugh/Desktop/Takeout/Mail/Inbox.mbox")

rddOfEmailsOrSomething = lines.map(lambda x: transformData(x)).collect()

# this should be a list of email objects with good properties
# like 'to', 'from' and 'subject', etc.
listOfEmails = list()

for _email in rddOfEmailsOrSomething:
     emailToAdd = email.message_from_string(_email)
     listOfEmails.append(emailToAdd)

print(listOfEmails[0].from)
# returns "example@example.com"

通常,当我在网上找不到任何可以帮助我解决问题的资源时,这意味着我正在尝试以错误的方式解决问题,并且需要以不同的方式进行思考。是这样吗?我对Apache Spark和PySpark并不陌生,但是我知道一些Python。

任何帮助,资源或建议,将不胜感激。

0 个答案:

没有答案