在我们的 Spark 流应用程序中,使用 60 秒的批处理,我们在 DF 上创建一个临时表,然后对其运行大约 80 个查询,例如:
sparkSession.sql("select ... from temp_view group by ...")
Run Code Online (Sandbox Code Playgroud)
但考虑到这些是相当繁重的查询,大约有 300 个汇总列,如果我们不必分析 sql 并为每个微批处理生成查询计划,那就太好了。
没有办法生成、缓存和重用查询计划吗?即使每次查询仅节省 50 毫秒,每批也将为我们节省大约 4 秒。
我们在 CDH/YARN 上使用 Spark 2.2。谢谢。
我正在为ORM使用Java和JPA.
最初我是这样定义实体键:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
Run Code Online (Sandbox Code Playgroud)
但是这导致ids变得非常快,并且以不可预测的方式增长(... 19,20,22,1003 ... 1007,1014,1015,2004 ...)
这似乎与文档相矛盾,文档声明"最简单的关键字段是一个长整数值,当对象首次保存到数据存储区时,JPA会自动填充该类,并且该类的所有其他实例都具有唯一值.键使用@Id注释和@GeneratedValue(strategy = GenerationType.IDENTITY)注释"
所以我找到了这个单元测试,然后切换到它在那里完成的方式:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
Run Code Online (Sandbox Code Playgroud)
更新了一些GQL语句后迁移得很好,但我仍然看到每次键增加1000.
我应该使用GenerationType.TABLE吗?或者我应该在Long而不是Key字段上使用IDENTITY?
我希望在我的live(beta)应用程序中不断更改之前得到一些确定的答案.不幸的是,到目前为止我在dev env中使用的所有方案都会产生连续的密钥,因此除了部署之外,没有办法测试新的方法.
提前致谢.