Я работаю над кодом, который прикрепляет файл из HDFS и отправляет электронное письмо.У меня есть код, работающий с файлом из локальной папки (домашний каталог linux), но когда я меняю местоположение вложения на местоположение HDFS, я получаю AttributeError: у объекта 'RDD' нет ошибки атрибута 'rfind'.Может кто-нибудь помочь, пожалуйста?
Я изменил кодировку на
part = MIMEApplication("".join(f.collect()).encode('utf-8').strip(), Name=basename(f))
, а также попытался
part = MIMEApplication(u"".join(f.collect()), Name=basename(f))
, но все равно получил ту же ошибку
Вот мой код
import smtplib
from os.path import basename
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
def success_mail():
sender = "no-reply@company.com"
receivers = 'user@company.com'
msg = MIMEMultipart()
msg.attach(MIMEText("Scoring completed. Attached is the latest report"))
f=sc.textFile("/user/userid/folder/report_20190501.csv")
part = MIMEApplication("".join(f.collect()).encode('utf-8', 'ignore'), Name=basename(f))
part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
msg.attach(part)
try:
smtp = smtplib.SMTP('smtp.company.com')
smtp.sendmail(sender, receivers, msg.as_string())
smtp.close()
logMessage("INFO - Successfully sent email with Attachment")
except:
emsg = traceback.format_exc()
logMessage("ERROR - Unable to send email because of :"+emsg)
Ошибка:
AttributeError Traceback (most recent call last)
<ipython-input-6-5606e23c7cf8> in <module>()
33 emsg = traceback.format_exc()
34 logMessage("ERROR - Unable to send email because of :"+emsg)
---> 35 success_mail()
<ipython-input-6-5606e23c7cf8> in success_mail()
22 msg.attach(MIMEText("Scoring completed. Attached is the latest report"))
23 f=sc.textFile("/user/userid/folder/report_20190501.csv")
---> 24 part = MIMEApplication("".join(f.collect()).encode('utf-8', 'ignore'), Name=basename(f))
25 part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
26 msg.attach(part)
/hadoop/ipython/userid/pyspark/lib64/python2.7/posixpath.pyc in basename(p)
112 def basename(p):
113 """Returns the final component of a pathname"""
--> 114 i = p.rfind('/') + 1
115 return p[i:]
116
AttributeError: 'RDD' object has no attribute 'rfind'