我必须将火花数据帧导出到文件(在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)
您没有提供足够的信息(火花版本、数据大小、附件文件类型......
假设您正在使用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 作为电子邮件附件发送的问题(