現在の入力行に基づいて集計関数によって使用されるウィンドウ枠内の行を制約します。例えば、データフレームdf
とウィンドウw
を与え、私のような何かをできるようにしたい:.filter
は、フレームの入力行に基づいて、現在のウィンドウ・フレームから行を削除します[Py] Spark SQL:フレームの入力行を使用してウィンドウの各フレームを制約します。
df2 = df.withColumn("foo", first(col("bar").filter(...)).over(w))
。次のように
私の具体的な使用例は次のとおりです。あなたは、各入力の最初の行(fr
)を見つけるだろうかDATAFRAME df
+-----+--+--+
|group|n1|n2|
+-----+--+--+
| 1| 1| 6|
| 1| 0| 3|
| 1| 2| 2|
| 1| 3| 5|
| 2| 0| 5|
| 2| 0| 7|
| 2| 3| 2|
| 2| 5| 9|
+-----+--+--+
ウィンドウ
w = Window.partitionBy("group")\
.orderBy("n1", "n2")\
.rowsBetween(Window.currentRow + 1, Window.unboundedFollowing)
といくつかの正のロングi
、考えます行r
のフレームr.n1
< fr.n1
、r.n2
< fr.n2
、max(fr.n1
-r.n1
,fr.n2
-r.n2
)< i
?返される値はfr.n1
またはfr
の行インデックスdf
になります。だから、私はスパークAPIを勉強してWindow、first、およびwhenの例で見てきた
+-----+--+--+-----+
|group|n1|n2|fr.n1|
+-----+--+--+-----+
| 1| 1| 6| null|
| 1| 0| 3| 1|
| 1| 2| 2| 3|
| 1| 3| 5| null|
| 2| 0| 5| 5|
| 2| 0| 7| 5|
| 2| 3| 2| null|
| 2| 5| 9| null|
+-----+--+--+-----+
i
= 6のために、たとえばdf
のための出力は以下のようになりますが、私は片に見えることはできません一緒に。これはWindowや集約関数でも可能ですか?それとも私は完全にマークから外れていますか?あなただけのウィンドウ関数と集計でそれを行うことができなくなります
ここで問題を本当にやりたかったことを私にはっきりと説明できませんか? '' | ''ならば –
2 | 3 | 2 | 5 | 'が真の場合、どうすれば' | 1 | 2 | 2 | 3 | 'は本当ですか?およびその逆。彼らはお互いに矛盾する。あなたの最終的なdfを見直してください。 –
おっと!元のサンプルソリューションを正しいものに更新しました。うまくいけば、もっと明確にするために、冒頭の一般的な説明に例を追加しました。 – alan