如何获得每列的最大值?

Posted

技术标签:

【中文标题】如何获得每列的最大值?【英文标题】:How to get max value of each column? 【发布时间】:2018-01-10 14:36:57 【问题描述】:

我想获取 Spark 中数据框每一列的最大值。我的代码仅适用于一列(例如第一列):

val col = df.columns(0);
val Row(maxValue: Int) = df.agg(max(col)).head();

我不知道如何结合foreach 和我拥有的代码,以便我可以获得数据框中每一列的最大值。 (我不知道数据框中有多少列,列名是什么)

谢谢。

【问题讨论】:

【参考方案1】:

foreach 当您想要将集合(在本例中为列名数组)转换为其他内容(在本例中为它们的最大值)时,这很少是有用的解决方案。相反,使用map - 然后将结果传递给agg

import spark.implicits._
import functions._

val df = Seq((1,3), (3, 1), (2, 2)).toDF("a", "b")

// map columns into columns representing their maximums 
val maxCols: Array[Column] = df.columns.map(max)

// aggregate all at once (have to separate first from rest due to agg's signature):
val row: Row = df.agg(maxCols.head, maxCols.tail: _*).head

编辑:正如@user8371915 提醒我们的那样,有一个更短的版本:

val row: Row = df.groupBy().max().head

【讨论】:

有没有办法在不烦人的情况下获取最大列的名称 max(actul_column_name)?

以上是关于如何获得每列的最大值?的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何获取按 id 分组的每列的 n 个最大值的平均值

PHP如何取二维数组中的某列的最大值和最小值?

pandas 选择每列的最小值和最大值并创建一个新的数据框

仅当高于 0 时才计算每列的最小值和最大值之间的差异

Java求解! 定义一个6行6列的二维整型数组,输出该二维数组中的每行和每列的最大值、最小值、和平均值。

如何获得具有最大值的列的行? [复制]