title: Comparing values from a TSV file and Hbase table in java
body: <p>I have a Hbase table which has a unique rowkey and one column family and one column.. I have a TSV file which has around 300+ columns. The rowkey in this file is a combined value of two columns. So now I need to compare the rowkey from the table and file, if rowkey matches then I need to insert the table column value as the last column in the TSV file for that respective rowkey. I have written the following code, but it always executes the else part. </p>
  
  <pre><code>package mapReduce;
  
  import java.io.BufferedReader;
  import java.io.BufferedWriter;
  import java.io.FileReader;
  import java.io.FileWriter;
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  
  import org.apache.hadoop.conf.Configuration;
  import org.apache.hadoop.hbase.HBaseConfiguration;
  import org.apache.hadoop.hbase.KeyValue;
  import org.apache.hadoop.hbase.client.HTable;
  import org.apache.hadoop.hbase.client.Result;
  import org.apache.hadoop.hbase.client.ResultScanner;
  import org.apache.hadoop.hbase.client.Scan;
  
  public class Tsv_read{
  
      private static Configuration conf = null;
  
      static {
          conf = HBaseConfiguration.create();
      }
  
      @SuppressWarnings("resource")
      public static void main(String[] arg) throws Exception {
  
          BufferedReader TSVFile = 
                  new BufferedReader(new FileReader("Path/to/file/.tsv"));
  
          String dataRow = TSVFile.readLine();
          List&lt;String&gt; list = new ArrayList&lt;String&gt;();
  
  
          while (dataRow != null){
              list.clear();
              String[] dataArray = dataRow.split("\t");
  
  
  
  
              for (String item:dataArray) { 
  
                  HTable table = new HTable(conf, "Table name"); //Hbase table name
                  Scan s = new Scan();
                  ResultScanner ss = table.getScanner(s);
                  for(Result r:ss){
                      for(KeyValue kv : r.raw()){
                          //System.out.println("Rowkey :" +dataArray[12]+"-"+dataArray[13]);
                          //System.out.print(new String(kv.getRow()) + " ");
                          if((dataArray[12]+"-"+dataArray[13]).equals(new String(kv.getRow()))){  //Comparing the rowkeys from file and table  (doesn't work)
                              System.out.println("File Rowkey :"+dataArray[12]+"-"+dataArray[13]);
                              System.out.println("Table Row key"+new String(kv.getRow()));
                              //dataArray[392]=new String(kv.getValue());
                              FileWriter fstream = new FileWriter("/path/to/the/file/*.tsv",true);
                              BufferedWriter fbw = new BufferedWriter(fstream);
                              fbw.write(new String(kv.getValue())); //inserting the value to the tsv file
                              fbw.newLine();
                              fbw.close();
                              System.out.println("Column value written succesfully");
                          }
                          else //always executes this part
                          {
                              System.out.println("RowKey not found :" +new String(kv.getRow()));
                          }
                          /*System.out.print(new String(kv.getFamily()) + ":");
                         System.out.print(new String(kv.getQualifier()) + " ");
                         System.out.print(kv.getTimestamp() + " ");*/
                          //System.out.println(new String(kv.getValue()));
  
  
                  list.add(item);
                      }
                  }
              } 
              Iterator&lt;String&gt; it = list.iterator();
              while (it.hasNext()) {
                  String txt = it.next();
                  System.out.print(txt+" ");
              } 
              System.out.println(); // Print the data line.
              dataRow = TSVFile.readLine(); 
          }
  
          TSVFile.close();
  
          System.out.println();
  
      } //main()
  } 
  </code></pre>
  
  <p><strong>Sample Record :</strong></p>
  
  <p>dataArray[12]+"-"+dataArray[13] = 3049620139673452544-5172983457411783096</p>
  
  <p>In the Hbase table, the rowkey also has the values in the same format.</p>
  
  <p>I can't share the whole record as it has 300+ columns.</p>
  
  <p><strong>TSV File Siz</strong>e: around 10GB</p>
  
  <p><strong>Hbase table</strong> : around 10254950 rows.</p>
  
  <p>Any help is appreciated. Thanks in advance.</p>