JavaSparkContext.newAPIHadoopRDD中的方法将class作为参数。
在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可能尚未初始化。我想我缺少了什么...
最佳答案
Java中的变量是null
或实例。您的变量inputFormatClass
既不是null
也不是实例,因此在对其进行初始化之前您无法对其进行任何操作。这就是它所抱怨的。
至于传递类,您可以执行以下操作:
Class<AvroKeyInputFormat> clazz = AvroKeyInputFormat.class
通用类型不会在运行时存储-它们仅用于验证。这就是为什么您不能有
AvroKeyInputFormat<AvroFlumeEvent>
类的原因