Скажите, что у меня есть файл почтового ящика Unix (* .mbox), такой большой, что я не могу надеяться сразу поместить его в память, и я не хочу разбираться с ним , планирование и отмена задач, устранение неисправностей и т. д.
Я считаю, что было бы неплохо использовать Apache Spark для этой задачи и написать программу на Python, чтобы ее было легко повторять.
Я знаю, что лучшее решение - это каким-то образом использовать один из множества отличных анализаторов файлов MBOX, доступных для сообщества Python, но как мне передать эту работу в кластер 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.
Любая помощь, ресурсы или предложения будут с благодарностью.