Дедуплицированные строки с помощью limitGroups не найдут кодировщик [Row] - PullRequest
0 голосов
/ 31 октября 2018
val spark = SparkSession.builder().appName("Test").master("local").getOrCreate()
import spark.implicits._

spark.sparkContext.parallelize(List((50, 2), (34, 4))).toDF("cs_p_id", "cs_ed")
  .groupByKey(_.getAs[String]("cs_p_id"))
  .reduceGroups(Seq(_, _).maxBy(_.getAs[Long]("cs_ed")))
  .map(_._2) // Unable to find encoder for type stored in a Dataset.

Выше не скомпилируется, потому что map не может найти неявное Encoder[Row].
Конечно, я не единственный парень, пытающийся сделать эту простую операцию, так какой путь?

Спасибо

EDIT:
Я нашел это решение, в которое я не могу поверить, что люди так поступают:

tableData
  .groupByKey(_.getAs[String]("cs_p_id"))
  .reduceGroups(Seq(_, _).maxBy(_.getAs[Long]("cs_ed")))
  .map(_._2)(RowEncoder(tableData.schema))

Это не дубликат Ошибка кодера при попытке сопоставить строку кадра данных с обновленной строкой , поскольку я пытаюсь просто удалить дубликаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...