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可能尚未初始化。我想我错过了什么......
答案 0 :(得分:1)
Java中的变量是null
或实例。您的变量inputFormatClass
既不是null
也不是实例,因此在初始化之前,您无法对其执行任何操作。这就是它所抱怨的。
至于上课,你可以这样做:
Class<AvroKeyInputFormat> clazz = AvroKeyInputFormat.class
通用类型不会在运行时存储 - 它们仅用于验证。这就是为什么你不能拥有AvroKeyInputFormat<AvroFlumeEvent>