私はSpark 2.1を使用しています。Spark SQLソート順はGroupByと集約で保持されませんか?
私は、次の例を実行する場合:
val seq = Seq((123,"2016-01-01","1"),(123,"2016-01-02","2"),(123,"2016-01-03","3"))
val df = seq.toDF("id","date","score")
val dfAgg = df.sort("id","date").groupBy("id").agg(last("score"))
dfAgg.show
dfAgg.show
dfAgg.show
dfAgg.show
dfAgg.show
上記のコードの出力は次のとおりです。
:+---+------------------+
| id|last(score, false)|
+---+------------------+
|123| 1|
+---+------------------+
+---+------------------+
| id|last(score, false)|
+---+------------------+
|123| 2|
+---+------------------+
+---+------------------+
| id|last(score, false)|
+---+------------------+
|123| 1|
+---+------------------+
+---+------------------+
| id|last(score, false)|
+---+------------------+
|123| 3|
+---+------------------+
+---+------------------+
| id|last(score, false)|
+---+------------------+
|123| 3|
+---+------------------+
意図は各IDの最新の日付に関連付けられたスコアを取得することでした
+---+------------------+
| id|last(score, false)|
+---+------------------+
|123| 3|
+---+------------------+
しかし、これは明らかに結果が非確定的であるために機能しませんでした。これを実現するためにウィンドウ関数を使用する必要がありますか?
を試すことができますか? –
スパークのバージョンはありますか? – hadooper
は、スパーク2.1の問題を再生成しようとしました。一貫した結果を得ました。 show operationを実行する前に "dfAgg.cache"を試してみてください。矛盾がまだあるかどうか教えてください。 – hadooper