我有一个巨大的数据框,我需要从中过滤对应多个范围的行。我尝试过两种方法,并且它们都非常慢,因为数据帧太大并且由hbase支持(使用shc库)。
链式多个过滤条件。 where((key> = range1.start&& key< = range1.end)||(key> = range2.start&& key< = range2.end)|| ...)
从范围列表中创建scanRanges数据框,然后为数据和扫描创建临时视图
allRecords.createOrReplaceTempView("数据&#34) scanRanges.createOrReplaceTempView("扫描&#34)
现在我运行此查询
sqlContext.sql("从数据中选择*,扫描在扫描._1和扫描._2&#34之间的data.col0;)。show(20)
我甚至尝试过广播扫描表,但这并没有帮助。我需要完全避免加入并能够过滤记录以避免在hbase上扫描它们。有可能吗?
例如为: 数据表(截断)
+------+-----+----+----+----+----+----+--------------+----+
| col0| col1|col2|col3|col4|col5|col6| col7|col8|
+------+-----+----+----+----+----+----+--------------+----+
|row000| true| 0.0| 0.0| 0| 0| 0| String0 extra| 0|
|row001|false| 1.0| 1.0| 1| 1| 1| String1 extra| 1|
|row002| true| 2.0| 2.0| 2| 2| 2| String2 extra| 2|
|row003|false| 3.0| 3.0| 3| 3| 3| String3 extra| 3|
扫描表
+------+------+
|_1 |_2 |
+------+------+
|row020|row024|
|row030|row034|
|row040|row044|
|row046|row049|
+------+------+
结果(截断)
+------+-----+----+----+----+----+----+--------------+----+
|col0 |col1 |col2|col3|col4|col5|col6|col7 |col8|
+------+-----+----+----+----+----+----+--------------+----+
|row043|false|43.0|43.0|43 |43 |43 |String43 extra|43 |
|row042|true |42.0|42.0|42 |42 |42 |String42 extra|42 |
|row044|true |44.0|44.0|44 |44 |44 |String44 extra|44 |
|row030|true |30.0|30.0|30 |30 |30 |String30 extra|30 |
|row048|true |48.0|48.0|48 |48 |48 |String48 extra|48 |
|row024|true |24.0|24.0|24 |24 |24 |String24 extra|24 |