在 Hbase 中查找具有空值的行数

Posted

技术标签:

【中文标题】在 Hbase 中查找具有空值的行数【英文标题】:Find count of rows with empty value in Hbase 【发布时间】:2018-01-03 00:50:34 【问题描述】:

我已经填充了一个 Hbase 表,其中包含与推文有关的 rowid 和 vrious 信息,例如纯文本、url、hashtag 等,如下所示

902221655086211073    column=clean-tweet:clean-text-cta, timestamp=1514793745304, value=democrat mayor order hurricane harvey stand houston

但是在填充时我注意到有些行是空的,就像

902487280543305728    column=clean-tweet:clean-text-cta, timestamp=1514622371008, value=  

现在我如何找到有数据的行数?

请帮帮我

【问题讨论】:

【参考方案1】:

到目前为止,在 HBase shell 中没有执行此操作的规定。也许您可以使用这样的简单代码来获取许多对提供的列限定符没有值的记录。

CountAndFilter [tableName] [columnFamily] [columnQualifier]

import java.io.IOException;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class CountAndFilter 

private static Connection conn;
private static int recordsWithoutValue = 0;
public static Admin getConnection() throws IOException 
    if (conn == null) 
        conn = ConnectionFactory.createConnection(HBaseConfiguration.create());
    
    return conn.getAdmin();


public static void main(String args[]) throws IOException 
    getConnection();
    scan(args[0], args[1], args[2]);
    System.out.println("Records with empty value : " + recordsWithoutValue);


public static void scan(String tableName, String columnFamily, String columnQualifier) throws IOException 
    Table table = conn.getTable(TableName.valueOf(tableName));
    ResultScanner rs = table.getScanner(new Scan().addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifier)));

    Result res = null;
    try 
        while ((res = rs.next()) != null) 
            if (res.containsEmptyColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(columnQualifier)))
                recordsWithoutValue++;
            
        
     finally 
        rs.close();
    


【讨论】:

以上是关于在 Hbase 中查找具有空值的行数的主要内容,如果未能解决你的问题,请参考以下文章

计算非空值的行

如何在 s-s-rS 的任何列中过滤具有空值的行

SQL从具有空值的行数据中选择MIN值

如何获取表中具有空值的行,并且没有任何关于任何列名的行?

PostgreSQL 查询列上具有最小空值的行

如何在 Spark/Scala 中查找具有许多空值的列