当我尝试编译以下代码时,我收到错误Expression of type java.lang.string does not conform to expected type String
:
case class MyForeachWriterClass[String] extends ForeachWriter {
var spark: SparkSession
var param: String
var mySet: Broadcast[Map[String,String]]
var myFeatures: Broadcast[Map[String,Array[String]]]
var producer: KafkaProducer[String,String]
var logger: Logger
def this(spark: SparkSession,
param: String,
mySet: Broadcast[Map[String,String]],
myFeatures: Broadcast[Map[String,Array[String]]],
producer: KafkaProducer[String,String],
logger: Logger)
{
this()
this.spark = spark
}
def process(row: String): Unit =
{
logger.info(s"Processing ${row}")
if (param == "yes") {
logger.info("Parsing data to JSON.")
var pid: String = "A"
}
}
错误出现在var pid: String = "A"
行上。但是我不明白它为什么不编译。我错过了什么?
答案 0 :(得分:2)
这就是原因:case class MyForeachWriterClass[String]
这使String
成为类型参数。因此,如果您执行类似val x = MyForeachWriterClass[Int]
的操作,那么您拥有String
的每个地方实际上都是Int
。
我不确定这里有什么意图,但看起来你想完全放弃[String]
部分。或者尝试class MyForeachWriterClass extends ForeachWriter[String]
。
此外,没有参数的case
类没有多大意义。
而且vars
(和一般的可变状态)在scala中不是惯用的。可能有一种(更好)的方式来编写你想要做的事情......