scala - 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 但这些是保存类类型的变量。
这个怎么做?
解决方案
如果我理解正确,您需要将 a 转换String
为Class
. 你可以这样做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
}
}
推荐阅读
- css - 带有 ReactJS 的 CSS 类名
- swift - Swift 单元测试函数,异步调度一个设置我要测试的变量的块
- python - Pandas If Else 条件多列
- anaconda - 在 anaconda 中创建 rstudio 环境时出错
- amazon-s3 - S3 存储桶的全局 CORS 策略怎么可能不适用于存储桶中的所有文件?
- javascript - 如何设置b-pagination的主色?
- laravel - Laravel 8 Jetstream Livewire 密码确认模式不起作用
- python - 如何使用 python 将字符和整数写入具有特定精度的二进制文件?
- python - 如何在 Visual Studio Code 中将我的解释器从 Python 3.8 更改为 Python 3.9?[已解决]
- flutter - 如何从 Flutter 中的另一个类调用对话框函数