将 JavaPairRDD<ImmutableBytesWritable, Result> 转换为 JavaRDD<String>
Convert JavaPairRDD<ImmutableBytesWritable, Result> to JavaRDD<String>
我正在尝试使用 Apache Spark 从 HBase 读取数据。我只想扫描一个特定的列。我正在为我的 HBase 数据创建一个 RDD,如下所示
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);
这是我要将字符串的 JavaPairRDD
转换为 JavaRDD
的位置。
JavaRDD<String> rdd = ...
我怎样才能做到这一点?
您可以使用如下所示的 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;
}
});
我正在尝试使用 Apache Spark 从 HBase 读取数据。我只想扫描一个特定的列。我正在为我的 HBase 数据创建一个 RDD,如下所示
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);
这是我要将字符串的 JavaPairRDD
转换为 JavaRDD
的位置。
JavaRDD<String> rdd = ...
我怎样才能做到这一点?
您可以使用如下所示的 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;
}
});