2017-12-06 20 views
0

私はpysparkに取り組んでいます。ハイブテーブルからデータを読み込み、すべての列と行番号を含むpysparkデータフレームを返すクエリを書く必要があります。行番号のハイブクエリ

これは私が試したものです:

SELECT *, ROW_NUMBER() OVER() as rcd_num FROM schema_name.table_name 

このクエリはハイブで正常に動作しますが、私はpysparkスクリプトから、それを実行すると、それは次のようなエラーがスローされます。

Window function row_number() requires window to be ordered, please add ORDER BY clause. For example SELECT row_number()(value_expr) OVER (PARTITION BY window_partition ORDER BY window_ordering) from table; 

いくつかのソリューションを提案してください。 。

注:特定の順序で行を並べ替えることは望ましくありません。並べ替えや並べ替えを行わずにテーブルにあるすべての行の行番号が必要です。あなたがテーブルに存在するすべての行の数字を行いますmonotonicallyIncreasingId機能を使用できるように、スパーク2.1

答えて

0

ROW_NUMBER()を使用して

は、順序付けを必要とするかもしれません。

from pyspark.sql.functions import monotonicallyIncreasingId 

df.withColumn("rcd_num ", monotonicallyIncreasingId()) 

OR

SELECT *, ROW_NUMBER() OVER (Order by (select NULL)) as rcd_num FROM schema_name.table_name

あなたはスパークのドキュメントからselect NULL

+0

によって順序を設定することができます: "生成されたIDが単調に増加し、ユニークな、しかし、連続していないことが保証されています。"私は連続番号が必要です。また、提案した2番目の解決策は、このエラーをスローします。 "エラー:コンパイル中のエラー:FAILED:ParseException行1:39は、 'select' 'NULL' 'の近くの入力を'式指定で認識できません。 : –

+0

単調に試してみることはできますか?一度試してみてrrsultを確認してください –

+0

試みました。 –