sql - 优化 Spark 中的 Hive 表加载时间

标签 sql scala apache-spark hive apache-spark-sql

我正在开发一个 Spark 流项目,其中传入的流与多个 Hive 表连接。所以我在spark中加载表并缓存它。

以下是给定的示例查询-

 val df = sql("select * from (select *, row_number() over (partition by a , b , c, d order by date desc) row_num from test) tmp where tmp.row_num = 1")

该表有 99% 的重复数据,所以我使用行号逻辑来区分。当我做 df.explain(true)下推没有条件。所以整个表加载到内存中。该表有数十亿条数据。这给 FAILED_TO_UNCOMPRESS(5)错误。

我是否应该使用上述查询创建 Hive View 并在 spark 中调用该 View ,以便获取结果数据。我不知道它是否有效。

大约有 10 个表每 15 分钟加载一次 Spark 。都具有相同的行号逻辑。如何启用下推?所以spark只能从Hive中获取结果数据。

最佳答案

您是否尝试过使用 MAX 函数而不是 ROW_NUM ?使用 ROW_NUM 可能是问题所在。我会使用以下查询:

val df = sql("select *, MAX(date) over (partition by a , b , c, d) from test")

MAX function definition更多细节。

关于sql - 优化 Spark 中的 Hive 表加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55286188/

相关文章:

sql - 将 PostgreSQL 表连接到另一个表的列

sql - UNION前后join的查询性能

sql - 在 SQL 中创建动态日期范围

java - 如何测试 Java 对象是否是 scala 中的枚举?

scala - 更优雅的Scala代码

elasticsearch - 为并行查询优化 Elasticsearch

php - while循环如何迭代assoc数组

java - 无法实例化 Kafka 结构化流 KafkaSourceProvider

apache-spark - DataProc集群Spark作业提交无法启动NodeManager

mongodb - Spark Mongodb 连接器 Scala - 缺少数据库名称