Я использую Apache Spark 2.2 с Scala 2.11.
У меня есть строка, из которой я создаю 1-граммовый, 2-граммовый и 3-граммовый.После этого я пытаюсь искать эти значения в кадре данных.Теперь этот процесс происходит много раз, из-за чего вся работа Spark занимает много времени.Как я должен думать по-другому?
Ниже приведен фрагмент кода:
// creating the n-grams
val vNGrams = for (i <- 1 to 3) yield sampleString.trim.split(" ").sliding(i).map(p => p.mkString(" "))
// converting them to a single array as above code generates three different iterators for different ngrams
val z = vNGrams.map(itr => itr.toArray).flatten.toArray
for (i <- 0 to z.length-1) {
val df = vSomeTable.select("COUNTRY_CODE").where(upper(col("ZIPCODE")) === z(i).toUpperCase)
if(df.count.toInt > 0) {
countryCode = df.take(1)(0)(0).toString
return countryCode
}
}
В интерфейсе Spark я вижу, что эти задания count
и take
занимают время.Этот фрагмент кода выполняется не менее 20 000 раз, также vSomeTable
- это кадр данных, содержащий 41 000 строк.
Дайте мне знать, если вам нужна дополнительная информация, или я могу сделать то же самое по-другому с меньшим временем.