2016-01-04 120 views
0

JavaSparkContext.newAPIHadoopRDD中的方法將class作爲參數。Java - 如何將通用類型的類傳遞給方法

Scala中我能夠使用像這樣的方法:

sc.newAPIHadoopRDD(job.getConfiguration, 
     classOf[AvroKeyInputFormat[AvroFlumeEvent]], 
     classOf[AvroKey[AvroFlumeEvent]], 
     classOf[NullWritable]) 

我怎麼做,在Java中?

如何將AvroKeyInputFormat<AvroFlumeEvent>的類傳入該方法。

我得到的最接近是:

 Class<AvroKeyInputFormat<AvroFlumeEvent>> inputFormatClass; 
     Class<AvroKey<AvroFlumeEvent>> keyClass; 

     JavaPairRDD<AvroKey<AvroFlumeEvent>, NullWritable> flumeEvents = sc.newAPIHadoopRDD(hadoopConf, 
       inputFormatClass, 
       keyClass, 
       NullWritable.class); 

然而,現在卻是抱怨inputFormatClass可能沒有被初始化。我想我錯過了一些東西......

回答

1

Java中的變量要麼是null要麼是一個實例。你的變量inputFormatClass既不是null也不是一個實例,所以你不能做任何事情,直到你初始化它。這就是它抱怨的。

至於傳遞類,你可以這樣做:

Class<AvroKeyInputFormat> clazz = AvroKeyInputFormat.class 

泛型類型不存儲在運行時 - 他們僅用於驗證。這就是爲什麼你不能擁有一類AvroKeyInputFormat<AvroFlumeEvent>

+0

@Sam_Sun謝謝...這些日子之一,我會發現什麼java泛型是好的... ... – hba

相關問題