首页 > 解决方案 > Scala:在参数中提供类类型

问题描述

我有一种将类作为参数的方法,如下所示。

    val hBaseRDD = spark.sparkContext.newAPIHadoopFile(path,
      classOf[org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat[ImmutableBytesWritable, Result]],
      classOf[ImmutableBytesWritable],
      classOf[Result], conf)

我想编写一个将参数作为类类型的方法,然后我可以在其中调用这一行。如下所示。

case class SequenceInput(conf: Configuration,
                         path: String,
                         storageClass: String,
                         keyClass: String,
                         valueClass: String,
                      ){
  override def read(sparkSession: SparkSession): DataFrame = {
    val rdd = sparkSession.sparkContext.newAPIHadoopFile(path,
      classOf[storageClass],
      classOf[keyClass],
      classOf[valueClass], conf)
    rdd
  }

但这要求我创建 storaClass、keyClass、valueClass 但这些是保存类类型的变量。

这个怎么做?

标签: scalaapache-spark

解决方案


如果我理解正确,您需要将 a 转换StringClass. 你可以这样做Class.forName(String)

case class SequenceInput(conf: Configuration,
                         path: String,
                         storageClass: String,
                         keyClass: String,
                         valueClass: String,
                        ) {
  override def read(sparkSession: SparkSession): DataFrame = {
    val rdd = sparkSession.sparkContext.newAPIHadoopFile(path,
      Class.forName(storageClass),
      Class.forName(keyClass),
      Class.forName(valueClass), conf)
    rdd
  }
}

推荐阅读