>데이터 베이스 >MySQL 튜토리얼 >Spark RDD에서 SQL의 `ROW_NUMBER()` 함수를 시뮬레이션하는 방법은 무엇입니까?

Spark RDD에서 SQL의 `ROW_NUMBER()` 함수를 시뮬레이션하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-22 09:41:57657검색

How to Simulate SQL's `ROW_NUMBER()` Function in Spark RDD?

Spark RDD와 동일한 SQL 행 번호

Spark에서 SQL의 row_number()와 동일한 행 번호를 얻습니다(partition by .. . order by ...) RDD의 경우 Spark 1.4의 향상된 기능을 사용하여 달성할 수 있습니다. 기능.

해결책:

  1. 테스트 RDD 생성:
val sample_data = Seq(((3, 4), 5, 5, 5),
((3, 4), 5, 5, 9),
((3, 4), 7, 5, 5),
((1, 2), 1, 2, 3),
((1, 2), 1, 4, 7),
((1, 2), 2, 2, 3))

val temp1 = sc.parallelize(sample_data)
  1. 키별 파티션과 순서:

Spark 1.4에 도입된 rowNumber() 함수를 활용하여 분할된 창을 만듭니다.

import org.apache.spark.sql.expressions.Window

val partitionedRdd = temp1
  .map(x => (x._1, x._2._1, x._2._2, x._2._3))
  .groupBy(_._1)
  .mapGroups((_, entries) =>
    entries.toList
      .sortBy(x => (x._2, -x._3, x._4))
      .zipWithIndex
      .map(x => (x._1._1, x._1._2, x._1._3, x._1._4, x._2 + 1))
  )
  1. 결과 출력:
partitionedRdd.foreach(println)

// Example output:
// ((1,2),1,4,7,1)
// ((1,2),1,2,3,2)
// ((1,2),2,2,3,3)
// ((3,4),5,5,5,4)
// ((3,4),5,5,9,5)
// ((3,4),7,5,5,6)

위 내용은 Spark RDD에서 SQL의 `ROW_NUMBER()` 함수를 시뮬레이션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.