scala - Zeppelin - 两次相同的 show(),两个不同的结果
问题描述
我是 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|
...
这两个结果之间的差异让我非常害怕。问题出在哪里?是齐柏林飞艇吗?底层火花?如何保证我会在这里得到可重复的结果?
解决方案
我能想到的唯一原因是
a) 同时源表sl_event
发生了变化。由于您没有缓存结果,因此您调用的任何操作(例如show
)都会重新评估所有内容
或 b)您有许多相同的事件event_time
,因此 order byevent_time limit 200
不会给您一致的结果,SORT BY event_time, event_type_id LIMIT 200
请在您的第一个查询中尝试,或者更好地使用唯一 id 您的第二个排序列
推荐阅读
- javascript - 将 .xml 转换为 JSON
- java - 需要修复我的递归代码(get 需要返回 int 或 stackoverflow 错误)
- django - Bootstrap 模态提交按钮在 Django 2.2 中不能与 DeleteView 一起使用
- jenkins-pipeline - 如何在 Jenkinsfile 中将构建部署到不同的 Artifactory?
- javascript - 当我重定向到另一个页面时,本地存储已损坏
- sql-server - 如何显示两个日期之间的日期
- java - 获取亚马逊页面和产品信息的最佳方式
- django - django分析没有模型的文件的heroku限制?
- laravel - 使用外部 Laravel 护照流明 api 进行 Laravel 客户端身份验证
- ruby-on-rails - 在 Ruby on Rails 中更新数据库临时版本时,最好的方法是什么?