-
spark 에서 groupByKey 로 특정 column 기준 unique row 만 남기기spark 2021. 7. 16. 21:45
문제
아래와 같이 Person 데이터가 있을 때
name age location a 1 A b 2 B a 3 C name 기준으로 unique 한 row 만 남긴다. name 이 a 인 레코드가 2개 있는데, 중복이 제거되어 둘 중 임의의 하나만 남으면 된다. 단순히 groupBy(name) 을 사용하면 age, location 에 대해 aggregation 을 해야되서 복잡해 진다.
Code
import org.apache.spark.sql.{Dataset, SparkSession} final case class Person(name: String, age: Int, location: String) object MySpark extends Serializable { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .master("local[*]") .getOrCreate() import spark.implicits._ val ds: Dataset[Person] = Seq(Person("a", 1, "A"), Person("b", 2, "B"), Person("a", 3, "C")).toDS() val groupByName = ds.groupByKey(_.name).mapGroups { case (_, iter) => iter.next() } groupByName.show(false) spark.stop } }
결과
name age location a 1 A b 2 B 혹은
name age location b 2 B a 3 C 'spark' 카테고리의 다른 글
spark tables - managed vs unmanaged(external) tables (0) 2021.07.25 데이터의 partition 수와 partition 별로 레코드 수 확인 방법 (0) 2021.07.18 spark 에서 schema 를 적용해 데이터 읽기 (0) 2021.07.18 windows10 에 hdfs 설치하기 (0) 2021.07.10 spark 을 local, cluster mode 에서 실행하기 위한 JVM option, log4j.properties 설정 (0) 2021.07.10