java.lang.string类型的表达式不符合预期类型String

时间:2017-12-15 16:41:08

标签: scala apache-spark spark-streaming

当我尝试编译以下代码时,我收到错误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"行上。但是我不明白它为什么不编译。我错过了什么?

1 个答案:

答案 0 :(得分:2)

这就是原因:case class MyForeachWriterClass[String] 这使String成为类型参数。因此,如果您执行类似val x = MyForeachWriterClass[Int]的操作,那么您拥有String的每个地方实际上都是Int

我不确定这里有什么意图,但看起来你想完全放弃[String]部分。或者尝试class MyForeachWriterClass extends ForeachWriter[String]

此外,没有参数的case类没有多大意义。

而且vars(和一般的可变状态)在scala中不是惯用的。可能有一种(更好)的方式来编写你想要做的事情......