CSV数据源不支持二进制数据类型

时间:2019-04-26 16:31:12

标签: csv apache-spark apache-kafka apache-spark-sql spark-structured-streaming

我正在尝试运行一个火花流应用程序,该应用程序从kafka流中读取数据并进行处理。我正在运行以下内容。

val schema = new StructType()
      .add("InvoiceNo", LongType)
      .add("StockCode", LongType)
      .add("Description", StringType)
      .add("Quantity", ShortType)
      .add("InvoiceDate", StringType)
      .add("UnitPrice", DoubleType)
      .add("CustomerID", IntegerType)
      .add("Country", StringType)


    val df = spark.readStream.
      format("kafka").
      option("kafka.bootstrap.servers", conf.get("spark.kafka_bootstrap_servers")).
      option("subscribe", "webserver").
      option("kafka.security.protocol", "SASL_SSL").
      option("kafka.sasl.mechanism", "PLAIN").
      option("kafka.ssl.protocol", "TLSv1.2").
      option("kafka.ssl.enabled.protocols", "TLSv1.2").
      option("failOnDataLoss", "false").
      load()

我收到以下错误。

Exception in thread "main" org.apache.spark.sql.streaming.StreamingQueryException: CSV data source does not support binary data type.

我在信息流中提供的csv是

536365,85123A,WHITE HANGING HEART T-LIGHT HOLDER,6,01/12/10 8:26,2.55,17850,United Kingdom

此错误可能是什么原因?

1 个答案:

答案 0 :(得分:0)

spark.readStream.format("kafka")始终以二进制而不是字符串的形式读取数据。

  

始终使用ByteArrayDeserializer将值反序列化为字节数组。使用DataFrame操作显式反序列化值
    -https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html

不清楚您在哪里使用了.csv()schema变量。

您可以在docs how it casts keys and values to strings

中看到