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))
Это не дубликат Ошибка кодера при попытке сопоставить строку кадра данных с обновленной строкой , поскольку я пытаюсь просто удалить дубликаты.