说我有一个 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。
任何帮助,资源或建议,将不胜感激。