#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")