特定の列から最小値と最大値を得る scala spark dataframe

データフレームから特定の列の最小値と最大値にアクセスしたいのですが、その列のヘッダーがなく、番号だけなので、scalaを使って行うべきでしょうか?

多分、次のようなものだと思います。

val q = nextInt(ncol) //we pick a random value for a column number
col = df(q)
val minimum = col.min()

くだらない質問に聞こえるかもしれませんが、この質問に関する情報をSOで見つけることができませんでした :/。

ソリューション

メタデータからカラム名を取得するのはどうでしょうか。

val selectedColumnName = df.columns(q) //pull the (q + 1)th column from the columns array
df.agg(min(selectedColumnName), max(selectedColumnName))
解説 (0)

変数を割り当てる際にパターンマッチを使用することができます。

import org.apache.spark.sql.functions.{min, max}
import org.apache.spark.sql.Row

val Row(minValue: Double, maxValue: Double) = df.agg(min(q), max(q)).head

qはまたは列の名前(文字列)です。データ型が Double だとします。

解説 (1)

カラム番号を使って、まずカラム名を抽出し(df.columnsにインデックスを付けて)、次にカラム名を集約して使うことができます。

val df = Seq((2.0, 2.1), (1.2, 1.4)).toDF("A", "B")
// df: org.apache.spark.sql.DataFrame = [A: double, B: double]

df.agg(max(df(df.columns(1))), min(df(df.columns(1)))).show
+------+------+

|max(B)|min(B)|
+------+------+
|   2.1|   1.4|
+------+------+
解説 (0)