使用 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[行] {
.........
我的 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[行] { .........