PySpark - отправка электронной почты с приложением CSV, весь CSV отображается в одной строке - PullRequest
0 голосов
/ 21 мая 2018

У меня есть скрипт, который генерирует DataFrame.Я преобразовываю DF в CSV, а затем отправляю его как вложение электронной почты.Проблема в том, что заголовок + данные находятся в первой строке, поэтому в результате CSV имеет 60 тыс. Столбцов и 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 Ответ

0 голосов
/ 21 мая 2018

Просто замените

"".join(filedata.collect()

на

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

или

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

или, что еще лучше, написание - чтение полностью:

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