Scala – Spark在Dataframe中检索,具有最大值的行,列名称
发布时间:2020-12-16 10:05:58 所属栏目:安全 来源:网络整理
导读:我有一个DataFrame: name column1 column2 column3 column4first 2 1 2.1 5.4test 1.5 0.5 0.9 3.7choose 7 2.9 9.1 2.5 我想要一个带有包含列的新数据框,列名称包含行的最大值: | name | max_column ||--------|------------|| first | column4 || test |
我有一个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 我想要一个带有包含列的新数据框,列名称包含行的最大值: | name | max_column | |--------|------------| | first | column4 | | test | column4 | | choose | column3 | 非常感谢您的支持. 解决方法
可能有一些更好的编写UDF的方法.但这可能是有效的解决方案
val spark: SparkSession = SparkSession.builder.master("local").getOrCreate //implicits for magic functions like .toDf import spark.implicits._ import org.apache.spark.sql.functions.udf //We have hard code number of params as UDF don't support variable number of args val maxval = udf((c1: Double,c2: Double,c3: Double,c4: Double) => if(c1 >= c2 && c1 >= c3 && c1 >= c4) "column1" else if(c2 >= c1 && c2 >= c3 && c2 >= c4) "column2" else if(c3 >= c1 && c3 >= c2 && c3 >= c4) "column3" else "column4" ) //create schema class case class Record(name: String,column1: Double,column2: Double,column3: Double,column4: Double) val df = Seq( Record("first",2.0,1,2.1,5.4),Record("test",1.5,0.5,0.9,3.7),Record("choose",7,2.9,9.1,2.5) ).toDF(); df.withColumn("max_column",maxval($"column1",$"column2",$"column3",$"column4")) .select("name","max_column").show 产量 +------+----------+ | name|max_column| +------+----------+ | first| column4| | test| column4| |choose| column3| +------+----------+ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Angular2 ngSwitch不工作
- Play 2.1中的scala.tools.nsc.IMain
- 如何为AngularJS模块提供配置?
- 删除Vim中一行之前的所有任意空格
- 我的CSDN 2007 MVB(最有价值BLOG)奖杯碎了,心疼!
- angularjs – 如何防止webpack在源目录中生成编译文件
- angularjs – 使用nginclude时避免使用额外的DOM节点
- www-data 不能执行 shell_exec soffice --convert-to
- From Serialized to Shell :: Auditing Google Web Toolkit
- 正确终止scala中的akka?? actor