2017-02-03 10 views
3

spark APIを使用してHbaseデータを読み取ろうとしています。JavaでnewAPIHadoopRDD(spark)を使用してHbaseデータを読み取る方法

コード:

// Define SparkContext 
    SparkConf sparkConf = new SparkConf().setAppName("Spark-Hbase").setMaster("master"); 
    sparkConf.set("XXX", "XXX"); 
    JavaSparkContext jsc = new JavaSparkContext(sparkConf); 

    // Conf with Hbase 
    Configuration conf = HBaseConfiguration.create(); 

    // Read data using spark 
    JavaPairRDD<ImmutableBytesWritable, Result> hBaseRDD = 
      jsc.newAPIHadoopRDD(conf, TableInputFormat.class, ImmutableBytesWritable.class, Result.class); 

問題がnewAPIHadoopRDD方法です。私はこのエラーがあり、私は理解していません。

Bound mismatch: The generic method newAPIHadoopRDD(Configuration, Class<F>, Class<K>, Class<V>) of type JavaSparkContext is not applicable for the arguments (Configuration, Class<TableInputFormat>, Class<ImmutableBytesWritable>, Class<Result>). The inferred type TableInputFormat is not a valid substitute for the bounded parameter <F extends InputFormat<K,V>> 

修正方法録音は、どのようなタイプのものであろう

+0

は、そのクラス 'TableInputFormatを確認し、以下の例に従うことができます'、' ImmutableBytesWritable'と 'Result'には正しいimport文があります – AdamSkywalker

答えて

4

を拡張し、あなたは

import java.io.IOException; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.hbase.HBaseConfiguration; 
import org.apache.hadoop.hbase.MasterNotRunningException; 
import org.apache.hadoop.hbase.ZooKeeperConnectionException; 
import org.apache.hadoop.hbase.client.Result; 
import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 
import org.apache.hadoop.hbase.mapreduce.TableInputFormat; 
import org.apache.spark.SparkConf; 
import org.apache.spark.api.java.JavaPairRDD; 
import org.apache.spark.api.java.JavaSparkContext; 

public class HBaseReader { 
    public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException { 
     Configuration conf = HBaseConfiguration.create(); 
     conf.set(TableInputFormat.INPUT_TABLE, "table_name"); 
     JavaSparkContext jsc = new JavaSparkContext(new SparkConf()); 
     JavaPairRDD<ImmutableBytesWritable, Result> source = jsc 
       .newAPIHadoopRDD(conf, TableInputFormat.class, 
         ImmutableBytesWritable.class, Result.class); 
     Result result = Result.EMPTY_RESULT; 

    } 
} 
+0

正確な名前空間ですか?ありがとうございました! – user2007861

+0

私はそれを見つけました。それは不安です "conf.set(TableInputFormat.INPUT_TABLE、"

");" – user2007861

0

あなたがnewAPIHadoopRDD

のためのInputFormatを使用する必要が
public class MyInputFormat extends InputFormat<NullWritable, Record> { } 

が書き込み可能

interface Record extends Writable {} 
関連する問題