私はスパークするのが初めてで、大きなデータセット用のrownumerを作成しようとしています。 私はpartitionBy節を使用していないので、うまく動作するrow_numberウィンドウ関数を使用しようとしましたが、効率的ではありません。oracle rownumに似たSpark DataframeでRownum機能を実現するには
例:
val df= Seq(
("041", false),
("042", false),
("043", false)
).toDF("id", "flag")
結果は次のようになります。現在、私は
df.withColumn("rownum",row_number().over(Window.orderBy($"id")))
を使用しています
val df= Seq(
("041", false,1),
("042", false,2),
("043", false,3)
).toDF("id", "flag","rownum")
は、ウィンドウ関数を使用せず、この結果を達成するための他の方法はありますか? 私はまた、あなたはインデックスが1つの追加、1でインデックスを開始する0
を開始すると、ここで
val df2 = df.withColumn("rownum",monotonicallyIncreasingId)
たrowNum機能を取得するためにmonotonicallyIncreasingId
を使用することができますmonotonicallyIncresingIDとZipwithIndex
"monotonicallyIncreasingId"は、複数回実行すると乱数を生成しますが、0または1から世代が発生することはありません。 – drlol
他の方法は、データフレームを 'RDD'に変換し、zipWithIndex関数を使用することです。 http://stackoverflow.com/questions/23939153/how-to-assign-unique-contiguous-numbers-to-elements-in-a-spark-rdd –
https://issues.apache.org/jira/browse/ SPARK-3098:これを読んで、 これはまた、目的を果たしていません..ありがとう!! – drlol