-
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' 카테고리의 다른 글
Dataset.groupByKey + reduceGroups (0) 2025.01.06 groupBy 후 collect_list 에 여러개의 column 값을 담기 (0) 2024.11.19 DataFrame 에 신규 칼럼 추가하기 (0) 2024.07.19 write partitionBy (0) 2023.02.26 Spark Dataset joinWith bug? (0) 2022.02.26