2016-12-02 3 views
0

Я работаю над этим проектом, где мне нужно получить данные таблицы в искровом фрейме и отправить его по почте. Язык, который будет использоваться, - Scala.Отправка Spark DataFrame по электронной почте

dataframe для хранения данных таблицы выглядит следующим образом: -

val sqlDfUT = hiveCon.sql("select * from UserTable") 

Мне нужно отправить «sqlDfUT» в теле сообщения в почте.

Код для отправки почты является:

sendScalaMail("[email protected]","Users Data Sent : \n " + sqlDfUT + 
        ",\nMail sent from host: " + java.net.InetAddress.getLocalHost().getHostName(), 
        "12525","Hive Data Checking completed for given User: 12525") 

def sendScalaMail (mailSender:String, strMailBody:String, mailIdList:String, strMailSubj:String)={ 

if ((mailIdList == null) && (mailIdList.equals(""))){ 

    writeToLog("Email ID not defined") 
} 
writeToLog("<----Sender---->"+mailSender) 
writeToLog("<----strMailBody---->"+strMailBody) 
writeToLog("<----mailIdList---->"+mailIdList) 
writeToLog("<----strMailSubj---->"+strMailSubj) 

val smtpHost:String = "mail.foo.com" 
val prop:Properties = new Properties() 
prop.put("mail.smtp.host", smtpHost) 
prop.put("mail.debug", "false") 
var session:Session = Session.getInstance(prop) 
var toPersonList:Array[String] = mailIdList.split(",") 

var toMailListSB:StringBuffer = new StringBuffer() 
var toPersonName:String = "" 
var toMailId:String = "" 
var index:Int = 0 

for(index <- 0 to toPersonList.length){ 

    toPersonName = toPersonList(index).asInstanceOf[String] 
    toMailId = toPersonName+"@mail.foo.com" 
    toMailListSB.append(toMailId) 
    toMailListSB.append(";") 

} 
try{ 
    var msg:MimeMessage = new MimeMessage(session) 
    msg.setFrom(new InternetAddress(mailSender)) 
    var toList:Array[String] = toMailListSB.toString().split(",") 
    var address:Array[InternetAddress] = new InternetAddress(toList.length.toString()).asInstanceOf[Array[InternetAddress]] 
    var i:Int = 0 
    for(i <- 0 to toList.length){ 
    address(i) = new InternetAddress(toList(i)) 
    } 
    msg.setRecipients(Message.RecipientType.TO, address) 
    msg.setHeader("Content-Type", "text/html") 
    msg.setSubject(strMailSubj) 
    msg.setSentDate(new Date())  
    msg.setContent(strMailBody, "text/html") 

    Transport.send(msg) 

} 
catch{ 
    case me:MessagingException =>{ 
    me.printStackTrace() 
    writeToLog("<---Error in method sendScalaMail--->"+me) 
    } 
} } 

Однако я получаю ошибку в строке

msg.setRecipients(Message.RecipientType.TO, address) 

и сообщение об ошибке

overloaded method value setRecipients with alternatives: (x$1: javax.mail.Message.RecipientType,x$2: String)Unit <and> (x$1: javax.mail.Message.RecipientType,x$2: Array[javax.mail.Address])Unit cannot be applied to (javax.mail.Message.RecipientType, Array[javax.mail.internet.InternetAddress]) 

Я буду действительно рад, если я смогу получить какие-либо указания. Спасибо

+0

Ошибка не связана с Spark, но с API почтовой рассылки. BTW вы хотите только один длинный, а не полный DataFrame –

+0

обновил вопрос, я хочу отправить dataframe, который имеет полные данные таблицы (записи меньше) по почте. –

+1

Неверный тип 'address', он должен быть' Array [Address] ' –

ответ

1
var address:Address = new InternetAddress(toMailId).asInstanceOf[Address] 

это сработало для меня !! Спасибо Рафаэль :)