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>类的原因

07-28 06:58