在Spark SQL中更改Null值排序

9

我需要能够按升序和降序对列进行排序,并允许将空值放在最前面或最后面。使用RDDs,我可以使用带有自定义比较器的sortByKey方法。我想知道是否有相应的方法可以使用数据集API。我知道如何向列添加desc / asc,但我不知道如何对空值进行排序。

2个回答

13
你也可以使用数据集 API 来完成这个任务:
scala>     val df = Seq("a", "b", null).toDF("x")
df: org.apache.spark.sql.DataFrame = [x: string]

scala> df.select('*).orderBy('x.asc_nulls_last).show
+----+
|   x|
+----+
|   a|
|   b|
|null|
+----+


scala> df.select('*).orderBy('x.asc_nulls_first).show
+----+
|   x|
+----+
|null|
|   a|
|   b|
+----+

对于 desc_nulls_lastdesc_nulls_first 同样适用。


4

正如Oleksandr所提到的,这方面已经有了一个拉取请求。现在您可以选择使用“nulls first”或“nulls last”。

scala> spark.sql("select * from spark_10747 order by col3 nulls last").show
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   6|   7|   4|
|   6|  11|   4|
|   6|  15|   8|
|   6|  15|   8|
|   6|   7|   8|
|   6|  12|  10|
|   6|   9|  10|
|   6|  13|null|
|   6|  10|null|
+----+----+----+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接