实际上,我的hbase表每天都在变化,我面临一个问题。我正在使用̀ shc核心将表读取为Dataframe,我将每一列存储为 STRING
类型。我要做的是每天只读取最后30天的数据。考虑到表每天都在变化,加载整个表并应用过滤器需要6个多小时。
我使用的是shc版本1.1.1-2.1-s\u 2.11
我要做的是:
val df = withCatalog(catalog)
df.filter($"date > "20191201" && $"date < "20200101")
当我这么做的时候 explain()
它在实际计划中显示了这一点
== Physical Plan ==
* Filter (isnotnull(ip#16) && (ip#16 >= 4F62B402))
+- *Filter <function1>.apply
+- *Scan HBaseRelation(Map(catalog ->....
我不明白 PushedFilters: [...]
也就是说没有被下推的 predicate 。
有谁能帮我解决这个问题吗?
在shay建议后编辑
我补充说:
Logger.getLogger("org").setLevel(Level.DEBUG)
Logger.getLogger("akka").setLevel(Level.DEBUG)
在我的Yarn原木里我得到了:
调试hbasefilter:对于所有筛选器:
调试hbasefilter:ret:debug
hbasefilter:开始:无结束:无
这意味着,根据下面的代码,没有将筛选器转换为hbasefilter,因此没有向下推的筛选器,尽管在物理计划中我们可以看到确实存在筛选器。
https://github.com/hortonworks-spark/shc/blob/76673b40b3ce370d0fbc4614938cbe54cfffa082/core/src/main/scala/org/apache/spark/sql/execution/datasources/hbase/hbasefilter.scala#l127
暂无答案!
目前还没有任何答案,快来回答吧!