apache-spark - Spark Sql - 运行两次
问题描述
我遇到了 ETL 流程的 spark 代码,在该代码中编写了长而复杂的 sql 语句并面临 oom 错误,有时单个作业需要 4 个小时才能多次执行相同的代码。
他们有很多这样的 etl 进程,我在这里粘贴了示例查询,其中包含带有嵌套和聚合、group by、ordr by 等的长复杂连接。顺便说一句,它仍然不是完整的查询
请查看以下查询,他们将其用作
SqlContext.sql(below query).write.mode(append).insertinto(hivetbl)
这是使用火花的正确方法吗?
SELECT
above 30 joins with aggregations
解决方案
我也有同样的问题。Spark 通过运行带有空结果的用户查询来推断列的类型。(查看https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/jdbc/JdbcDialects.scala第 112 行,getSchemaQuery 函数)
像 (select ... from ...) 这样的简单查询,其中 1=0 会非常快,但是具有连接操作的查询会像连接操作一样慢。
也许您可以使用(https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html)“customSchema ”选项来防止火花推断您的结果类型。
推荐阅读
- javascript - 反应状态如何工作?
- php - 如何在 php 中将 mysqli 代码转换为 Oracle 代码?
- twilio - 按日期范围检索 Twilio 消息?
- javascript - 如何在页面呈现之前加载字体?
- ruby-on-rails - Rails 5使用参数从url地址查询
- angular - 如何使用 django rest 框架和 angular 上传图片?
- spring - 带有两个罐子的 docker 中的 Spring Boot
- rest - 是否必须将 RestTemplate 用于宁静的 Web 服务?或者在给@PostMapping 提供响应实体时可以忽略它?
- ios - 从设置打开应用程序时如何检测授权状态是否更改
- windows - 加载DLL文件时,是否也调用了DLL文件的入口点?