查找Array列的最大值,并在数据框中查找与之相关联的另一个Array的值



我有一个csv文件与以下数据。

<表类> Id 主题 是 tbody><<tr>1M P C10、8、62M P C5、7、93M P C6, 7 4

如果你将你的Dataframe强类型化为你控制的数据集,你可以很容易地使用map函数。你只需要定义一个case类+编码器就可以了。

我制作了一个非常简单的csv文件,其中包含以下确切内容(您的数据):

Id;Subject;Marks
1;M,P,C;10,8,6
2;M,P,C;5,7,9
3;M,P,C;6,7,4

代码看起来像这样(大部分只是正确地读取数据):

import spark.implicits._
import org.apache.spark.sql.Encoders
case class MyClass(Id: Int, Subject: Seq[String], Marks: Seq[Int])
implicit val myEncoder = Encoders.product[MyClass]
val df = spark.read.option("header", "true").option("sep", ";").csv("csvWithArrays.csv")
val parsedDF = df
.withColumn("Id", col("Id").cast("int"))
.withColumn("Subject", split(col("Subject"), ","))
.withColumn("Marks", split(col("Marks"), ",").cast("array<int>"))
.as[MyClass]
val output = parsedDF.map{
case MyClass(id, subject, marks) => {
val maxMark = marks.max
val maxSubject = subject(marks.indices.maxBy(marks))
(id, maxSubject, maxMark) 
}
}
output.show                                                                                                                                                                                                                                                              
+---+---+---+                                                                                                                                                                                                                                                                   
| _1| _2| _3|                                                                                                                                                                                                                                                                   
+---+---+---+                                                                                                                                                                                                                                                                   
|  1|  M| 10|                                                                                                                                                                                                                                                                   
|  2|  C|  9|                                                                                                                                                                                                                                                                   
|  3|  P|  7|                                                                                                                                                                                                                                                                   
+---+---+---+

一旦你有了强类型的数据集,你可以很容易地使用Scala语言来得到你想要的:)

希望这对你有帮助!

最新更新