-
groupBy 후 group 당 N 개의 record 만 남기기spark 2025. 1. 6. 21:19
groupBy 후 group 당 최대 N=300 개만 남긴다고 할 때
방법1
groupByKey + mapGroups 사용
val urlLineDs: Dataset[(String, Seq[String])] = spark.read.text(path) .toDF("url", "item") .groupByKey(row => row.getAs[String]("url")) .mapGroups { case (url, rowIter: Iterator[Row]) => val itemList: Seq[String] = rowIter.take(300).map(_.getAs[String]("item")).toList (url, itemList) }방법2
window function 사용
val window = Window.partitionBy("url").orderBy(col("item")) spark.read.text(path) .toDF("url", "item") .withColumn("_row_number", row_number().over(window)) .where(col("_row_number") <= 300) .groupBy("url") .agg(collect_list("item").as("itemList"))'spark' 카테고리의 다른 글
각 파티션에서 TaskContext를 사용해 현재 partitionId가져오기 (1) 2025.07.11 Dataset 으로 정의된 case class 의 fields 가져오기 (0) 2025.06.10 Dataset.groupByKey + reduceGroups (0) 2025.01.06 groupBy 후 collect_list 에 여러개의 column 값을 담기 (0) 2024.11.19 DataFrame 에 신규 칼럼 추가하기 (0) 2024.07.19