Scala 如何逃离';是保留关键字,不能用作字段名';Spark SQL和结构化流媒体出错?;

Scala 如何逃离';是保留关键字,不能用作字段名';Spark SQL和结构化流媒体出错?;,scala,apache-spark,apache-spark-sql,spark-structured-streaming,lift-json,Scala,Apache Spark,Apache Spark Sql,Spark Structured Streaming,Lift Json,当前,当我使用Structured Streaming v2.1.0+Kafka v0.10进行实时日志处理时,我在线程“main”java.lang.UnsupportedOperationException中遇到异常:`package`是保留关键字,不能用作字段名 我的任务需要两个逻辑部分: 第一部分。通过net.liftweb.json将包含一些json fromat字符串的日志消息转换为相应的case类 我的一个案例类定义如下: case class Mobile(val title:

当前,当我使用Structured Streaming v2.1.0+Kafka v0.10进行实时日志处理时,我在线程“main”java.lang.UnsupportedOperationException中遇到异常:`package`是保留关键字,不能用作字段名

我的任务需要两个逻辑部分:

第一部分。通过net.liftweb.json将包含一些json fromat字符串的日志消息转换为相应的case类

我的一个案例类定义如下:

case class Mobile(val title: Option[String],
                  val desc: Option[String],
                  val adtype: Option[Int],
                  val apkname: Option[String],
                  @transient val `package`: Option[String],
                  val appstoreid: Option[String]
                 ) extends java.io.Serializable
第二部分。使用结构化流媒体v2.1.0+卡夫卡v0.10进行实时处理:

    val spark: SparkSession = SparkSession.
      builder().
      appName("structured streaming test").
      getOrCreate()

    val df = spark.
      readStream.
      format("kafka").
      option("kafka.bootstrap.servers", "localhost:9092").
      option("subscribe", "stream1").
      option("maxOffsetPerTrigger", "10000").
      load()

    import spark.implicits._

    val ds = df.

      //change the value's type from binary to STRING
      selectExpr("CAST(value AS STRING)").
      as[String].
      map(myLogicToProcessLogs)

    val query = ds.
      writeStream.
      outputMode("append").
//      format("console").
      trigger(ProcessingTime("10 seconds")).
      foreach(new HttpSink).
      start()

    query.awaitTermination()
我得到的错误原因是,我的日志消息包含一些java保留关键字,如“package”,Spark SQL编码器总是失败

注意:通过使用“package”来逃避scala关键字检查,并使用@transient关键字来逃避java序列化,我可以成功地将上面的case类转换为RDD,并在没有任何错误提示的情况下为批处理执行后续转换和操作。 但是,我怎样才能从Spark SQL编码器和结构化流媒体中逃脱关键字检查呢

有一个相关问题: 但我可以这样说,因为liftweb json仍然需要case类construtor参数“package”进行解析

我还发现还有其他json工具,比如Gson,提供json字段命名支持,将标准Java字段名转换为json字段名,在liftweb json上有类似的方法吗?