spark数据框中orderBy的列列表
Posted
技术标签:
【中文标题】spark数据框中orderBy的列列表【英文标题】:List of columns for orderBy in spark dataframe 【发布时间】:2020-04-10 19:45:11 【问题描述】:我有一个包含列名的变量列表。我正在尝试使用它在数据帧上调用 orderBy。
val l = List("COL1", "COL2")
df.orderBy(l.mkString(","))
但是mkstring
将列名合并为一个字符串,导致这个错误-
org.apache.spark.sql.AnalysisException: cannot resolve '`COL1,COL2`' given input columns: [COL1, COL2, COL3, COL4];
如何将此字符串列表转换为不同的字符串,以便查找“COL1”、“COL2”而不是“COL1、COL2”? 谢谢,
【问题讨论】:
【参考方案1】:传递单个 String
参数是告诉 Spark 使用具有给定名称的一列对数据框进行排序。有一种方法可以接受多个列名,您可以这样使用它:
val l = List("COL1", "COL2")
df.orderBy(l.head, l.tail: _*)
如果您关心订单,请改用Column
版本的orderBy
val l = List($"COL1", $"COL2".desc)
df.orderBy(l: _*)
【讨论】:
谢谢。这就是我想要的。有没有办法在这里指定 desc ?【参考方案2】:您可以为特定列调用 orderBy:
import org.apache.spark.sql.functions._
df.orderBy(asc("COL1")) // df.orderBy(asc(l.headOption.getOrElse("COL1")))
// OR
df.orderBy(desc("COL1"))
如果你想按多列排序,你可以这样写:
val l = List($"COL1", $"COL2".desc)
df.sort(l: _*)
【讨论】:
谢谢鲍勃,从头和尾开始,最终归结为使用你在最后的东西...... @NITS 不错!如果您满意,我们很高兴以上是关于spark数据框中orderBy的列列表的主要内容,如果未能解决你的问题,请参考以下文章
Spark基于其他数据框中的列对数据框中的列进行重复数据删除
如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列