使用 DataFrame 在数据块中的火花流中以小写形式接收的输入数据全部

Input data received all in lowercase on spark streaming in databricks using DataFrame

我的 spark 流应用程序使用 aws kenisis 中的数据并部署在 databricks 中。我正在使用 org.apache.spark.sql.Row.mkString 方法来使用数据,并且整个数据都是以小写形式接收的。实际输入具有驼峰式字段名称和值,但在使用时以小写形式接收。

我已经尝试从一个简单的 java 应用程序中使用,并且正在从运动队列中正确接收数据。问题仅出现在使用 DataFrame 的 Spark Streaming 应用程序和数据块中的 运行。

// scala code

val query = dataFrame
      .selectExpr("lcase(CAST(data as STRING)) as krecord")
      .writeStream
      .foreach(new ForeachWriter[Row] {

        def open(partitionId: Long, version: Long): Boolean = {
          true
        }

        def process(row: Row) = {
          logger.info("Record received in data frame is -> " + row.mkString)
          processDFStreamData(row.mkString, outputHandler, kBase, ruleEvaluator)
        }

        def close(errorOrNull: Throwable): Unit = {
        }
      })
      .start()

期望是spark streaming输入json应该是同一个case 字母(驼峰式)作为kinesis中的数据,一旦使用数据帧接收,不应将其转换为小写。

有没有想过可能导致这种情况的原因?

修复了问题,select 表达式中使用的 lcase 是罪魁祸首,更新了如下代码并且它起作用了。

val 查询 = dataFrame .selectExpr("CAST(data as STRING) as krecord") .writeStream .foreach(新的 ForeachWriter[行] { .........