如何将s3 / Hdfs中的文件附加到Spark-Scala中的电子邮件中?

时间:2018-04-08 05:53:06

标签: java scala email

我必须将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)

1 个答案:

答案 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作为电子邮件附件发送的问题