ApacheSpark—选择对列排序后的第一个元素,并将其转换为scala中的列表

zpf6vheq  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(389)

在scala中,对Dataframe中的一列进行排序、将其转换为list并将第一个元素赋给variable的最有效方法是什么。我试了以下方法

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.{col, first, regexp_replace}
import org.apache.spark.sql.functions._

println(CONFIG.getString("spark.appName"))

  val conf = new SparkConf()
    .setAppName(CONFIG.getString("spark.appName"))
    .setMaster(CONFIG.getString("spark.master"))

  val spark: SparkSession = SparkSession.builder().config(conf).getOrCreate()

val df = spark.read.format("com.databricks.spark.csv").option("delimiter", ",").load("file.csv")
val dfb=df.sort(desc("_c0"))
val list=df.select(df("_c0")).distinct

但我仍然无法将第一个元素保存为变量

q43xntqr

q43xntqr1#

使用 select , orderBy , map & head 假定列 _c0 属于类型 string ,如果是不同的类型,则必须在中修改列数据类型 _.getAs[<your column datatype>] 检查以下代码。

scala> import spark.implicits._
import spark.implicits._

scala> val first = df
.select($"_c0")
.orderBy($"_c0".desc)
.map(_.getAs[String](0))
.head

scala> import spark.implicits._
import spark.implicits._

scala> val first = df
.select($"_c0")
.orderBy($"_c0".desc)
.head
.getAs[String](0)

相关问题