2017-02-03 8 views
3

Я пытаюсь читать данные Hbase с помощью API-схемы искры.Как использовать newAPIHadoopRDD (искру) в Java для чтения данных 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' имеют правильные операторы импорта – 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

вы должны использовать InputFormat для newAPIHadoopRDD

public class MyInputFormat extends InputFormat<NullWritable, Record> { } 

Запись будет любого типа распространяется на запись

interface Record extends Writable {} 

 Смежные вопросы

  • Нет связанных вопросов^_^