使用 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