перезапись фрейма данных spark создает дубликаты

#dataframe #scala #apache-spark #duplicates

Вопрос:

У меня есть функция groupby в df следующим образом:

 val df2 = df1.groupBy($"word").agg(sum($"word_num") as "cnt")  df2.write.format("csv")  .mode(SaveMode.Overwrite)  .option("header", "true").option("delimiter", "t")  .save(outputPath)  

После сохранения df2, когда я перезагружу его из hdfs:

 val pFeatureDF = spark.read.format("csv")  .option("header","true")  .option("delimiter","t")  .load(outputPath)  

В df2 существует дублирующее ключевое слово, подобное этому:

 word cnt word1 10990 word1 11 word2 20980 word2 10  

Комментарии:

1. Не могли бы вы, пожалуйста, поделиться своим входным файлом. Вы напечатали df2.показать

2. Может быть word1 и word1 так .

Ответ №1:

Поскольку groupBy по определению невозможно возвращать дубликаты для агрегированных ключей, это, вероятно, связано с пробелами в значениях столбца word .

Вы можете удалить пробелы с обеих сторон значения с помощью функции trim :

 import org.apache.spark.sql.functions.{sum, trim}  val df2 = df1.groupBy(trim($"word")).agg(sum($"word_num") as "cnt")