我正在研究一个火花流项目,其中传入的流与多个蜂巢表相连。因此,我将桌子加载到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)
错误。
是否应该使用上述查询创建蜂巢视图并在Spark中调用视图,以获取结果数据。我不知道它是否有效。
大约有10张桌子每15分钟加载火花。所有人都有相同的行号逻辑。如何启用下降?因此,火花只能从Hive中获取所得数据。
您是否尝试过使用 max 函数而不是 row_num ?Row_num的使用可能是问题。我将使用以下查询:
val df = sql("select *, MAX(date) over (partition by a , b , c, d) from test")
有关更多详细信息,请参见 max 功能定义。