在SparkSQL中对数据集使用限制后应用过滤器时,结果奇怪

时间:2019-07-04 15:29:31

标签: apache-spark apache-spark-sql

我正在使用spark 2.2.1,但我的问题似乎也在2.4中发生。我正在尝试使用下面引述其定义的limit函数。

def limit(n: Int): Dataset[T]
Returns a new Dataset by taking the first n rows.

这是一个玩具例子,再现了我的问题。

scala> spark.range(10).limit(5).show()
+---+
| id|
+---+
|  0|
|  1|
|  2|
|  3|
|  4|
+---+

scala> spark.range(10).limit(5).where('id > 3).show()
+---+
| id|
+---+
|  5|
|  6|
+---+

我希望只有一个数据行包含4。它是错误,是功能吗?无论如何,我不明白结果。任何对解释的提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的数据集不是固有排序的,因此limit(5)可以返回[0 1 2 3 4][1 3 5 7 9][2 7 1 3 8]等。应用orderBy子句将为您提供您期望的结果。

scala> spark.range(10).orderBy('id).limit(5).where('id > 3).show()
+---+
| id|
+---+
|  4|
+---+