JavaSparkContext.newAPIHadoopRDD 中的方法以类作为参数。
在 scala 中我可以使用这样的方法:
sc.newAPIHadoopRDD(job.getConfiguration,
classOf[AvroKeyInputFormat[AvroFlumeEvent]],
classOf[AvroKey[AvroFlumeEvent]],
classOf[NullWritable])
我如何在java中做到这一点?
我如何通过AvroKeyInputFormat<AvroFlumeEvent>
的类(class)进入方法。
我得到的最接近的是:
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>
类。
关于Java - 如何将泛型类型的类传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601788/