2017-12-20 28 views
0

Apache Spark을 사용하여 HBase에서 데이터를 읽으려고합니다. 하나의 특정 열만 스캔하려고합니다. 내가 문자열의 JavaRDDJavaPairRDD을 변환 할 경우JavaPDDRDD <ImmutableBytesWritable, Result>을 JavaRDD로 변환 <String>

다음
SparkConf sparkConf = new SparkConf().setAppName("HBaseRead").setMaster("local[2]"); 
JavaSparkContext sc = new JavaSparkContext(sparkConf); 
Configuration conf = HBaseConfiguration.create(); 
conf.set("hbase.zookeeper.quorum", "localhost:2181"); 

String tableName = "myTable"; 

conf.set(TableInputFormat.INPUT_TABLE, tableName); 
conf.set(TableInputFormat.SCAN_COLUMN_FAMILY, "myCol"); 


JavaPairRDD<ImmutableBytesWritable, Result> hBaseRDD = sc.newAPIHadoopRDD(conf, TableInputFormat.class, 
     ImmutableBytesWritable.class, Result.class); 

은 아래처럼 내 HBase와 데이터의 RDD을 만드는 오전.

JavaRDD<String> rdd = ... 

어떻게하면됩니까?

답변

0

아래와 같이 map 기능을 사용하면 JavaRDD<String>을 얻을 수 있습니다.

import org.apache.spark.api.java.function.Function; 
import org.apache.hadoop.hbase.util.Bytes; 
import scala.Tuple2; 

JavaRDD<String> javaRDD = javaPairRdd.map(new Function<Tuple2<ImmutableBytesWritable,Result>, String>() { 
    @Override 
    public String call(Tuple2<ImmutableBytesWritable, Result> tuple) throws Exception { 
     Result result = tuple._2; 
     String rowKey = Bytes.toString(result.getRow());//row key 
     String fName = Bytes.toString(result.getValue(Bytes.toBytes("myColumnFamily"), Bytes.toBytes("firstName")));//firstName column 
     return fName; 
    }  
});