【发布时间】:2020-11-16 10:19:34
【问题描述】:
我使用 Hbase 和 Spark。我需要按状态(可能是 0、1、2、3)从表中获取过滤数据。我只需要状态 = 0 的数据——这大约是 Hbase 中所有数据的 5%。
什么会更快 - 使用过滤器扫描 Hbase 或使用 Spark 过滤器过滤所有已读取所有 Hbase 数据的数据的 rdd?
为什么?它取决于什么?
Scan scan = new Scan();
scan.setFilter(new SingleColumnValueFilter(...));
JavaRDD<MyType> rdd = <get data from table with scan>
或
JavaRDD<MyType> rdd = <get all data from table with new Scan()>
rdd.filter(r->r.getStatus()==0)
【问题讨论】:
-
你尝试的时候发生了什么?你有没有得到一些意想不到的性能数据?
-
不,两者都有效。但是现在我无法测试大数据来知道它。
-
一个小笔记。 HBase 不是为支持这些查询而构建的。它们当然有效,但它们违背了 HBase 的理念。如果有很多数据,这两个查询都将花费很长时间(据说使用 HBase 过滤器的查询更短,如下所述),但通常应避免这些类型的查询或构建特定的索引。
标签: apache-spark hbase