Spark 2:如何从数据框中过滤多个范围

时间:2017-09-15 18:50:06

标签: sql apache-spark-sql spark-dataframe

我有一个巨大的数据框,我需要从中过滤对应多个范围的行。我尝试过两种方法,并且它们都非常慢,因为数据帧太大并且由hbase支持(使用shc库)。

  1. 链式多个过滤条件。 where((key> = range1.start&& key< = range1.end)||(key> = range2.start&& key< = range2.end)|| ...)

  2. 从范围列表中创建scanRanges数据框,然后为数据和扫描创建临时视图

    allRecords.createOrReplaceTempView("数据&#34)    scanRanges.createOrReplaceTempView("扫描&#34)

    现在我运行此查询

    sqlContext.sql("从数据中选择*,扫描在扫描._1和扫描._2&#34之间的data.col0;)。show(20)

  3. 我甚至尝试过广播扫描表,但这并没有帮助。我需要完全避免加入并能够过滤记录以避免在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  |
    

0 个答案:

没有答案