ホームページ > データベース > mysql チュートリアル > RDDを使用してSparkでSQLのrow_number()関数をレプリケートする方法は?

RDDを使用してSparkでSQLのrow_number()関数をレプリケートする方法は?

Barbara Streisand
リリース: 2024-12-24 01:18:19
オリジナル
580 人が閲覧しました

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

Spark RDD と同等の SQL Row_Number を取得する

SQL では、row_number() 関数を使用して一意の行番号を生成できます。パーティション化され順序付けされたテーブルの各行に対して。この機能は、RDD を使用して Spark で複製できます。この記事では、これを実現する方法について概説します。

スキーマ (K, V) を持つ RDD を考えてみましょう。ここで、V はタプル (col1、col2、col3) を表します。目標は、キー K のパーティションによって編成された、各タプルの行番号を表す追加の列を持つ新しい RDD を取得することです。

First Attempt

1 つの共通アプローチは、RDD を収集し、sortBy()、sortWith()、または sortByKey() などの関数を使用して並べ替えることです。ただし、このメソッドは row_number() 関数のパーティション化の側面を維持しません。

パーティションを意識した順序付け

パーティション化された行番号を実現するには、ウィンドウ関数を利用できます。スパークで。ただし、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート