线程“main”中的异常org.apache.spark.sql.AnalysisException:

时间:2017-07-24 09:17:59

标签: scala apache-spark apache-kafka streaming

我正在尝试使用kafka spark结构化流,但是遇到一些异常,例如线程中的异常“main”org.apache.spark.sql.AnalysisException:无法解析给定输入列的“device”: [value,offset,partition,key,timestamp,timestampType,topic];

附加我的代码

import org.apache.spark.sql._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.types._
import org.apache.spark.sql.streaming.ProcessingTime
case class DeviceData(device: String, deviceType: String, signal: String)

object dataset_kafka {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
          .builder()
          .appName("kafka-consumer")
          .master("local[*]")
          .getOrCreate()
        import spark.implicits._

       spark.sparkContext.setLogLevel("WARN")


    val df = spark
        .readStream
        .format("kafka")
        .option("kafka.bootstrap.servers", "172.21.0.187:9093")
        .option("subscribe", "test")
        .option("startingOffsets", "earliest")
        .load()
        println(df.isStreaming)
        println(df.printSchema())

    val ds: Dataset[DeviceData] = df.as[DeviceData]

    val values = df.select("device").where("signal == Strong")

    values.writeStream
          .outputMode("append")
          .format("console")
          .start()
            .awaitTermination()


  }
}

任何帮助如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

Kafka流始终生成以下字段:valueoffsetpartitionkeytimestamptimestampType,{{1} }。在您的情况下,您对topic感兴趣,但请注意values are always deserialized as byte arrays,因此,在反序列化JSON之前,需要输入cast to string。

请尝试以下代码:

value