> 데이터 베이스 > MySQL 튜토리얼 > RDD를 사용하여 Spark에서 SQL의 row_number() 함수를 복제하는 방법은 무엇입니까?

RDD를 사용하여 Spark에서 SQL의 row_number() 함수를 복제하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-24 01:18:19
원래의
554명이 탐색했습니다.

How to Replicate SQL's row_number() Function in Spark Using RDDs?

Spark RDD에 해당하는 SQL Row_Number 가져오기

SQL에서 row_number() 함수를 사용하면 고유한 행 번호를 생성할 수 있습니다. 분할되고 정렬된 테이블의 각 행에 대해. 이 기능은 RDD를 사용하여 Spark에서 복제할 수 있으며 이 기사에서는 이를 달성하는 방법을 설명합니다.

V가 튜플(col1, col2, col3)을 나타내는 스키마(K, V)가 있는 RDD를 생각해 보세요. 목표는 키 K의 파티션으로 구성된 각 튜플의 행 번호를 나타내는 추가 열이 있는 새 RDD를 얻는 것입니다.

첫 번째 시도

공통 접근 방식은 RDD를 수집하고 sortBy(), sortWith() 또는 sortByKey()와 같은 함수를 사용하여 이를 정렬하는 것입니다. 그러나 이 방법은 row_number() 함수의 분할 측면을 유지하지 않습니다.

파티션 인식 순서

분할된 행 번호를 얻으려면 Window 기능을 활용할 수 있습니다. 스파크에서. 그러나 Window 함수는 기본적으로 RDD가 아닌 DataFrame과 함께 사용하도록 설계되었습니다.

DataFrame 사용

다행히 Spark 1.4부터 row_number() 기능을 DataFrame에 사용할 수 있습니다. . 다음 예를 따르세요.

# Create a test DataFrame
testDF = sc.parallelize(
    (Row(k="key1", v=(1,2,3)),
     Row(k="key1", v=(1,4,7)),
     Row(k="key1", v=(2,2,3)),
     Row(k="key2", v=(5,5,5)),
     Row(k="key2", v=(5,5,9)),
     Row(k="key2", v=(7,5,5))
    )
).toDF()

# Add the partitioned row number
(testDF
 .select("k", "v",
         F.rowNumber()
         .over(Window
               .partitionBy("k")
               .orderBy("k")
              )
         .alias("rowNum")
        )
 .show()
)
로그인 후 복사

이렇게 하면 분할된 행 번호가 있는 DataFrame이 생성됩니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿