我有一个记录表,首先在这里收集:
val finalResults: Array[Records] =
sqlContext.sql("select * from Records").as[Records].collect()
然后我循环浏览这些记录,因为这些记录包含一封电子邮件,我只想给收件人发送他们自己的数据:
for(i <- 0 until finalResults.length){
val email = finalResults(i).email
val arrayOfRecords : Array[Records] = Array(finalResults(i))
val HTMLTableOfRecords: String = generateReport(arrayOfRecords)
var emailContent : String = "";
emailContent = s"""<html><head></head><body>
<p><h1>TITLE</h1></p>
<b>Here are your results:</b><br>
${HTMLTableOfRecords}
<br><br>
</p>
<p>
</p>"""
sendEmail(s"EXAMPLE RECORDS",emailContent, List(email))
}
这样做的问题是收件人数据可能会出现多次,因此电子邮件可能会被删除 example@email.com
至少4次。上面的代码将发送4个单独的电子邮件到 example@email.com
如果它在记录中出现了4倍。
问题是我如何才能改变上述代码更智能,并发送数据,以供用户使用 example@email.com
在一封邮件中有3倍的记录?
编辑:
我已经将sql中的记录更新为 order by email desc
. 只是需要一个好的方法,有一个检查的地方,如果电子邮件是同一组,他们一起在数组中的数据然后 generateReport
. 然后转到上一封电子邮件索引之后的下一组记录。
1条答案
按热度按时间0ve6wy6x1#
不需要在sql中排序,您可以使用
groupBy
在scala中,按电子邮件地址对记录进行分组: