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 중국어 웹사이트의 기타 관련 기사를 참조하세요!