从特定列中获取最小值和最大值 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)