使用 pyspark 将 Outlook 电子邮件转换为 json 文件格式

Posted

技术标签:

【中文标题】使用 pyspark 将 Outlook 电子邮件转换为 json 文件格式【英文标题】:Outlook email conversion to json file format usiong pyspark 【发布时间】:2019-06-27 12:12:26 【问题描述】:

我有大约 1 封 lac Outlook 电子邮件,并希望使用 pyspark 的分布式功能将它们转换为 json 格式。 Outlook 电子邮件首先以 .msg 格式保存,然后执行将其转换为 json 格式的 python 算法。由于邮件数量很大,有没有办法利用spark的分布式计算优势,利用pyspark实现将所有msg文件转换为json?

【问题讨论】:

【参考方案1】:

你确实可以用 pyspark 做到这一点,但我不能保证性能。

# first, acquire your data as a whole
rdd = sc.wholeTextFile("/path/to/files.msg")

# each line of your rdd will be a (key,value) pair where key is the path and value is the content of the file
# you need then to apply your python function to the "value"
json_rdd = rdd.map(lamba x : msg_to_json(x[1])

# json_rdd should now contain a json on each line, you just need to write it down
json_rdd.saveAsTextFile("/path/to/save/files.json")

在你这边,你只需要准备 msg_to_json 函数,它将 msg 文件的内容作为字符串输入并返回一个 json 文件。


编辑: 使用您的库,它将是:

import extract_msg
rdd = sc.binaryFiles("/path/to/files.msg")
rdd = rdd.map(extract_msg.Message)

【讨论】:

感谢您的回复。是否可以通过 wholeTextFiles() 函数调用加载“.msg”文件?如果没有,您能建议其他方式吗?我已经在 python 中实现了一个 msg_to_json() 函数,只是在寻找一种将它与你提到的 pyspark RDD 集成的方法。 嗯,这就是我的回答……你有什么不明白的吗?只需使用第一行rdd = sc.wholeTextFile("/path/to/files.msg") 我尝试运行命令:sc.wholeTextFile("/path/to/files.msg"),它给了我这样的输出:[(u'dbfs:/........./file1.msg', u'\ufffd\ufffd\x11\u0871\x1a\ufffd\x00\x00\x00\x00\x00\x00\x00\x00\')],而不是电子邮件正文的文本内容。 显然您的文件是二进制文件,因此请尝试使用sc.binaryFiles() 来读取您的数据。它将为您提供文件的二进制输出,然后您可以对其进行操作。 我能够获取二进制数据,但将其转换为文本格式对我来说有点困难。您对如何执行相同的操作有任何想法吗?

以上是关于使用 pyspark 将 Outlook 电子邮件转换为 json 文件格式的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 java 邮件将富文本内容类型的邮件发送到 Outlook

如果 Outlook 关闭,则从 C# OOM 发送的电子邮件将保留在发件箱中,直到下一次 Outlook 启动

Outlook 规则将电子邮件保存为文本

使用 VBA 宏选择和复制 Outlook 电子邮件正文

怎么将Outlook邮箱中的存档邮件导入到新的电脑

在将电子邮件发送到 Outlook 中的外部域之前发出警告