У меня есть таблица рекордов, которая сначала собрана здесь:

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. Затем перейдите к следующему набору записей после индекса последнего электронного письма.

0
Sam 27 Ноя 2020 в 16:57

1 ответ

Лучший ответ

Нет необходимости сортировать в sql, вы можете использовать groupBy в scala для группировки записей по адресу электронной почты:

finalResults.groupBy(_.email).foreach { case (email, arrayOfRecords) =>
  val HTMLTableOfRecords: String = generateReport(arrayOfRecords)
  // emailContent...
  sendEmail(s"EXAMPLE RECORDS",emailContent, List(email))
}
0
rethab 27 Ноя 2020 в 17:02