Как использовать PySpark для анализа больших файлов почтовых ящиков - PullRequest
0 голосов
/ 28 июня 2019

Скажите, что у меня есть файл почтового ящика 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.

Любая помощь, ресурсы или предложения будут с благодарностью.

...