Как исправить «AttributeError: у объекта« RDD »нет атрибута« rfind »»? - PullRequest
0 голосов
/ 02 мая 2019

Я работаю над кодом, который прикрепляет файл из 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'

1 Ответ

1 голос
/ 02 мая 2019

попробуйте заменить эти 3 строки:

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)

на:

file_path="/user/userid/folder/report_20190501.csv"
f=sc.textFile(file_path)
part = MIMEApplication("".join(f.collect()).encode('utf-8', 'ignore'), Name=basename(file_path))
part['Content-Disposition'] = 'attachment; filename="%s"' % basename(file_path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...