我是齐柏林飞艇的新手,也许我的问题很幼稚。首先,我得到如下基本数据:
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)
我很困惑:每执行一次(在齐柏林飞艇),我都会得到不同的结果。例如:
+-------------+-----+
|event_type_id|count|
+-------------+-----+
| 24222| 30|
| 10644| 16|
| 21164| 9|
...
或者-几秒钟后:
+-------------+-----+
|event_type_id|count|
+-------------+-----+
| 5715| 34|
| 3637| 19|
| 3665| 17|
| 9280| 13|
...
这两个结果之间的差异使我感到非常恐惧。问题出在哪里?是齐柏林飞艇吗?潜在的火花?如何确保我在这里能得到可重复的结果?
答案 0 :(得分:1)
我能想到的唯一原因是
a)同时,源表sl_event
已更改。由于您没有缓存结果,因此您调用的任何操作(例如show
)都会重新评估所有内容
或b)您有许多具有相同event_time
的事件,因此按event_time limit 200
进行排序将无法为您提供一致的结果,请在第一个查询中尝试使用SORT BY event_time, event_type_id LIMIT 200
,甚至最好使用您第二个订购栏的唯一ID