Spark DataFrame df
が与えられた場合、特定の数値列'values'
の最大値を求め、その値に達した行を取得します。私はもちろん、これを行うことができます。Spark DataFramesのargmax:最大値の行を取得する方法
# it doesn't matter if I use scala or python,
# since I hope I get this done with DataFrame API
import pyspark.sql.functions as F
max_value = df.select(F.max('values')).collect()[0][0]
df.filter(df.values == max_value).show()
をしかし、それはdf
を2回通過を必要とするため、これは非効率的です。
pandas.Series
/DataFrame
とnumpy.array
は(ワンパスで)効率的にこれを行うargmax
/idxmax
方法を有しています。標準的なPython(組み込み関数max
はキーパラメータを受け取りますので、最も高い値のインデックスを見つけるために使用できます)。
Sparkの正しいアプローチは何ですか?最大値が得られる行をすべて取得するか、それらの行の任意の(空ではない!)部分集合を取得するかどうかは気にしないことに注意してください。
をクロス言語であり、任意のデータ上で動作することができますは良い解決策はありません。 – zero323
@ zero323 DataFrame APIのRDDコードをScalaに変換し、Catalystが動作するために適切なメタデータを追加することで、以下の答えでRDDコードをラップすることはなぜ不可能ですか? – max
これは可能ですが、ScalaまたはPython_を使用すると_itは問題ではないという前提をはっきりと分かりません.SQLだけで注文可能なデータ型でも行うことができますが、これは特殊なケースではありません。 – zero323