Странные результаты при применении фильтра после использования лимита для набора данных в SparkSQL - PullRequest
1 голос
/ 04 июля 2019

Я использую 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 Ответ

1 голос
/ 04 июля 2019

Ваш набор данных не упорядочен по своей природе, поэтому 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|
+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...