Scala-Spark In Dataframe检索具有最大值的行,列名称 [英] Scala - Spark In Dataframe retrieve, for row, column name with have max value

查看:281
本文介绍了Scala-Spark In Dataframe检索具有最大值的行,列名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个DataFrame:

I have a DataFrame:

name     column1  column2  column3  column4
first    2        1        2.1      5.4
test     1.5      0.5      0.9      3.7
choose   7        2.9      9.1      2.5

我想要一个新的数据框,其中包含包含contain的列,该列名称的行具有最大值:

I want a new dataframe with a column with contain, the column name with have max value for row :

| name   | max_column |
|--------|------------|
| first  | column4    |
| test   | column4    |
| choose | column3    |

非常感谢您的支持.

推荐答案

我要发布最终解决方案:

I want post my final solution:

val finalDf = originalDf.withColumn("name", maxValAsMap(keys, values)).select("cookie_id", "max_column")

val maxValAsMap = udf((keys: Seq[String], values: Seq[Any]) => {

    val valueMap:Map[String,Double] = (keys zip values).filter( _._2.isInstanceOf[Double] ).map{
      case (x,y) => (x, y.asInstanceOf[Double])
    }.toMap

    if (valueMap.isEmpty) "not computed" else valueMap.maxBy(_._2)._1
  })

工作非常快.

这篇关于Scala-Spark In Dataframe检索具有最大值的行,列名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆