Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala spark dataframe中orderBy的列列表_Scala_Apache Spark Sql - Fatal编程技术网

Scala spark dataframe中orderBy的列列表

Scala spark dataframe中orderBy的列列表,scala,apache-spark-sql,Scala,Apache Spark Sql,我有一个包含列名的变量列表。我试图用它来调用数据帧上的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]; 如何将此字符串列表转换

我有一个包含列名的变量列表。我试图用它来调用数据帧上的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”?
谢谢,

您可以致电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: _*)

传递单个
String
参数是告诉Spark使用一个具有给定名称的列对数据帧进行排序。有一种方法可以接受多个列名,您可以这样使用它:

val l = List("COL1", "COL2")
df.orderBy(l.head, l.tail: _*)

如果您关心订单,请使用
版本的
orderBy

val l = List($"COL1", $"COL2".desc)
df.orderBy(l: _*)

谢谢这就是我想要的。有没有办法在这里指定desc?谢谢Bob,从head和tail开始,最后使用你在这里的东西…@NITS Nice!如果你满意,我很高兴