scala - 更改数据块中的 scala 代码以根据电子邮件发送分组数据
问题描述
我有一个记录表,首先在这里收集:
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 次。example@email.com
如果上面的代码在 Records 中出现 4x,则将发送 4 封单独的电子邮件。
问题是如何将上述代码更改为更智能并在一封电子邮件中发送数据example@email.com
,其中一封电子邮件中有 3x 记录?
编辑:
我已将 sql 中的记录更新为order by email desc
. 只需要一个好方法来检查电子邮件是否相同,然后将它们与数组中的数据一起分组generateReport
。然后在最后一封电子邮件的索引之后移动到下一组记录。
解决方案
不需要在 sql 中排序,您可以groupBy
在 scala 中使用通过电子邮件地址对记录进行分组:
finalResults.groupBy(_.email).foreach { case (email, arrayOfRecords) =>
val HTMLTableOfRecords: String = generateReport(arrayOfRecords)
// emailContent...
sendEmail(s"EXAMPLE RECORDS",emailContent, List(email))
}
推荐阅读
- android - Kotlin NullPointerException 问题
- php - 如何计算数组中的文本?
- c++ - Visual Studio Code:CMake 工具选项卡中的文件路径不正确
- c++ - 从矢量中擦除
- java - 如何以并行模式运行有序的 JUnit5 测试
- python - 通过 crontab 运行烧瓶命令
- r - 如何使用某些定义的逻辑根据特定日期范围及其价值查找每周二
- python - 可视化层输出时出现 Keras(带有 Tensorflow 2 后端)错误
- c# - 如何从没有属性的 XML 文件中获取节点并将其放入字符串列表
- php - PHP GD 库 - 文本/字体不显示