PySpark - 发送附有 CSV 的电子邮件,整个 CSV 显示在一行上

Posted

技术标签:

【中文标题】PySpark - 发送附有 CSV 的电子邮件,整个 CSV 显示在一行上【英文标题】:PySpark - Send Email with CSV attached, entire CSV showing up on one line 【发布时间】:2018-10-31 12:19:36 【问题描述】:

我有一个生成 DataFrame 的脚本。我将 DF 转换为 CSV,然后将其作为电子邮件附件发送。问题是标题 + 数据都在第一行,所以生成的 CSV 有 60k 列和 1 行。怎么了?

这是我的代码:

df.toPandas().to_csv("/dbfs/<path>/df.csv", mode='w+', encoding='utf-8')
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login("<email>", "<password>")

sender = "<email>"
recipient = "<email>"
msg = MIMEMultipart()
msg['Subject'] = 'I need help'
msg['From'] = sender
msg['To'] = recipient

filedata = sc.textFile("/dbfs/<path>/df.csv", use_unicode=False)
msg.attach(MIMEText('This is your test message with attachment...'))
part = MIMEApplication("".join(filedata.collect()), Name="df.csv")
part['Content-Disposition'] = 'attachment; filename="%s"' % 'df.csv'
msg.attach(part)
server.sendmail(sender, [recipient], msg.as_string())
server.close()

【问题讨论】:

【参考方案1】:

只需替换

"".join(filedata.collect()

"\n".join(filedata.collect())

sc.wholeTextFiles("/dbfs/<path>/df.csv").values().first()

甚至更好的写作 - 完整的阅读例程:

MIMEApplication(df.toPandas().to_csv(), Name="df.csv")

【讨论】:

准确。谢谢楼主

以上是关于PySpark - 发送附有 CSV 的电子邮件,整个 CSV 显示在一行上的主要内容,如果未能解决你的问题,请参考以下文章

如何一次发送多封电子邮件,每个电子邮件都带有一个 xlsx 文件附件?

android导出到csv并作为电子邮件附件发送

Biztalk:包含映射到 CSV 的电子邮件的 XML,作为附件发送

从 html 表单发送带有 csv 附件的电子邮件

通过电子邮件发送 .csv 后,如何使用 PHP 下载 .csv 文件? [关闭]

从正在运行的进程检查发送带有 CSV 的电子邮件