Цеппелин - дважды одно и то же шоу (), два разных результата - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в Zeppelin, возможно, мой вопрос наивен. Сначала я получаю базовые данные, такие как:

import org.apache.spark.sql.functions.sql
val dfOriginal = sql("SELECT CAST(event_type_id AS STRING), event_time  FROM sl_event SORT BY event_time LIMIT 200")

+-------------+--------------------+ 
|event_type_id| event_time| 
+-------------+--------------------+ 
| 23882|2018-05-03 11:41:...| 
| 23882|2018-05-03 11:41:...| 
| 23882|2018-05-03 11:41:...| 
| 25681|2018-05-03 11:41:...| 
| 23882|2018-05-03 11:41:...| 
| 2370|2018-05-03 11:41:...| 
| 23882|2018-05-03 11:41:...|
...

У меня 200 таких записей.

Я вычисляю вхождения четных типов следующим образом:

val dfIndividual = dfOriginal.groupBy("event_type_id").count().sort(-col("count"))
dfIndividual.show(200)

Я запутался: всякий раз, когда я выполняю это (в Zeppelin), я получаю разные результаты. Например:

+-------------+-----+
|event_type_id|count| 
+-------------+-----+ 
| 24222| 30| 
| 10644| 16| 
| 21164| 9|
...

или - всего несколько секунд спустя:

+-------------+-----+ 
|event_type_id|count| 
+-------------+-----+ 
| 5715| 34| 
| 3637| 19| 
| 3665| 17| 
| 9280| 13|
...

Разница между этими двумя результатами пугает меня всерьез. В чем проблема? Это Цеппелин? Базовая искра? Как заверить, что я получу воспроизводимые результаты здесь?

1 Ответ

0 голосов
/ 07 сентября 2018

единственная причина, по которой я могу думать, это то, что

a) исходная таблица sl_event за это время изменилась. Поскольку вы не кэшировали результаты, любое вызванное вами действие (например, show) будет переоценивать все

или б) у вас много событий с одинаковым event_time, поэтому порядок по event_time limit 200 не даст вам согласованных результатов, попробуйте SORT BY event_time, event_type_id LIMIT 200 в первом запросе или даже лучше используйте уникальный идентификатор во втором столбце заказа

...