我正在开发一个 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/