首页 > 解决方案 > Scala:在数据帧的每一行中查找最大值

问题描述

对于 DataFrame 的每一行,我想提取最大值并将其放入新列中。下面的示例代码为我提供了每个最大值的 DataFrame ('dfmax'):

  val donuts = Seq((2.0, 1.50, 3.5), (4.2, 22.3, 10.8), (33.6, 2.50, 7.3))
  val df = sparkSession
    .createDataFrame(donuts)
    .toDF("col1", "col2", "col3")
  df.show()

  import sparkSession.implicits._
  val dfmax = df.map(r => r.getValuesMap[Double](df.schema.fieldNames).map(r => r._2).max)
  dfmax.show

这给了我df:

+----+----+----+
|col1|col2|col3|
+----+----+----+
| 2.0| 1.5| 3.5|
| 4.2|22.3|10.8|
|33.6| 2.5| 7.3|
+----+----+----+

和 dfmax:

+-----+
|value|
+-----+
|  3.5|
| 22.3|
| 33.6|
+-----+

我想将这两个框架组合在一个表格中,最好使用.withColumn或类似的样式(我无法开始工作):

def maxValue(data: DataFrame): DataFrame = {
   val dfmax = df.map(r => r.getValuesMap[Double](df.schema.fieldNames).map(r => r._2).max)
   dfmax
}
val udfMaxValue = udf(maxValue _)
df.withColumn("max", udfMaxValue(df))

标签: scaladataframemaxrow

解决方案


推荐阅读