我必须将spark DataFrame导出到文件(在S3 / HDFS上),然后将该文件作为电子邮件附件发送。
在scala中执行此操作的最简单方法是什么?
我试过看javax.activation.mail,但我无法弄清楚如何从S3 / HDFS上的文件中获取数据源
messageBodyPart = new MimeBodyPart()
val source: FileDataSource = new FileDataSource(pathToAttachment)
messageBodyPart.setDataHandler(new DataHandler(source))
messageBodyPart.setFileName(pathToAttachment)
multipart.addBodyPart(messageBodyPart)
答案 0 :(得分:0)
您没有提供足够的信息(火花版本,数据大小,附件文件类型......)
假设您正在使用Java Mail API& Spark 1.6& HDFS,您希望将CSV作为附件发送。
首先保存您的DF
DF.coalesce(1).write.mode("overwrite").format("com.databricks.spark.csv").option("header", "true").save("/pathToFolder/")
val filePath = "/pathToFolder/part-xxxx"
从HDFS加载
namenode = "hdfs://..."
val hdfs = FileSystem.get(new URI(namenode), new Configuration())
val path = new Path(filePath)
val stream = hdfs.open(path)
val fileName = "mydata.csv"
设置附件
messageBodyPart = new MimeBodyPart()
messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(stream,"text/csv")))
messageBodyPart.setFileName(fileName)
multipart.addBodyPart(messageBodyPart)
重要:这是 spark 1.6 和小 数据集的示例(因为它'将DF作为电子邮件附件发送的问题