我想訪問我的數據框中特定列的最小值和最大值,但我沒有列的標題,只是它的編號,所以我應該我使用Scala?從特定列中獲取最小值和最大值scala火花數據幀
也許是這樣的:
val q = nextInt(ncol) //we pick a random value for a column number
col = df(q)
val minimum = col.min()
很抱歉,如果這聽起來像一個愚蠢的問題,但我找不到任何有關這個問題上,所以任何信息:/
我想訪問我的數據框中特定列的最小值和最大值,但我沒有列的標題,只是它的編號,所以我應該我使用Scala?從特定列中獲取最小值和最大值scala火花數據幀
也許是這樣的:
val q = nextInt(ncol) //we pick a random value for a column number
col = df(q)
val minimum = col.min()
很抱歉,如果這聽起來像一個愚蠢的問題,但我找不到任何有關這個問題上,所以任何信息:/
如何從元數據獲得列名:
val selectedColumnName = df.columns(q) //pull the (q + 1)th column from the columns array
df.agg(min(selectedColumnName), max(selectedColumnName))
您可以使用列號第一(通過索引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|
+------+------+
可以使用模式匹配而分配變量:
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可以是一個Column
或列(字符串)的名稱。假設你的數據類型是Double
。
這裏是一個直接的方式來獲得一個數據幀列名的最小值和最大值:
val df = Seq((1, 2), (3, 4), (5, 6)).toDF("A", "B")
df.show()
/*
+---+---+
| A| B|
+---+---+
| 1| 2|
| 3| 4|
| 5| 6|
+---+---+
*/
df.agg(min("A"), max("A")).show()
/*
+------+------+
|min(A)|max(A)|
+------+------+
| 1| 5|
+------+------+
*/
如果你想獲得的最小值和最大值作爲獨立變量,那麼你可以轉換的結果上面的agg()
轉換爲並使用Row.getInt(index)
獲取的列值。
val min_max = df.agg(min("A"), max("A")).head()
// min_max: org.apache.spark.sql.Row = [1,5]
val col_min = min_max.getInt(0)
// col_min: Int = 1
val col_max = min_max.getInt(1)
// col_max: Int = 5
那是整齊的,要直接取值 –