Scala 如何在结构化流媒体中将JSON消息转换为数据帧?

Scala 如何在结构化流媒体中将JSON消息转换为数据帧?,scala,apache-spark,spark-structured-streaming,Scala,Apache Spark,Spark Structured Streaming,我有一个从卡夫卡读取的火花流代码,但我的值如下: "{ id:'1',name: 'John', address: 'Highway 37' }|{ id:'2',name: 'Marta', address: 'Highway 37' }|{ id:'3',name: 'Juan', address: 'Highway 37' }|{ id:'4',name: 'Erick', address: 'Highway 37' }|{ id:'6',name: 'Alex', address: 'H

我有一个从卡夫卡读取的火花流代码,但我的值如下:

"{ id:'1',name: 'John', address: 'Highway 37' }|{ id:'2',name: 'Marta', address: 'Highway 37' }|{ id:'3',name: 'Juan', address: 'Highway 37' }|{ id:'4',name: 'Erick', address: 'Highway 37' }|{ id:'6',name: 'Alex', address: 'Highway 37' }|{ id:'7',name: 'Juanjo', address: 'Highway 37' }|{ id:'8',name: 'Pam', address: 'Highway 37' }|{ id:'9',name: 'Paty', address: 'Highway 37' }|{ id:'10',name: 'Diana', address: 'Highway 37' }"
是json的字符串集,这是我的kafka值:

val kafkaRawData = df.selectExpr("CAST(value AS string)")

但是我想将这个字符串json数据集转换为dataframe或dataset,我该怎么做呢?

您只需使用具有以下签名的标准函数和运算符即可:

foreachBatch(function: (Dataset[T], Long) ⇒ Unit): DataStreamWriter[T]

使用
from_json
可以将字符串转换为正确的json,而
foreachBatch
可以访问每个微批的
数据集。

使用
from_json
函数处理json字符串到对象的转换。为了简化这个过程,或者使其更通用,请在文件中保存一个示例json字符串,以便从中读取以推断模式。使用此架构并将其传递给函数。有时,对于复杂的json对象,使用
StructType
创建模式可能会变得很麻烦

val schema = spark.read.json(sampleFilePath).schema
inputDF.selectExpr("CAST(value AS STRING) as data")
    .select(from_json(col("data"),schema).as("data"))

或者无论如何,如果我有一个接一个的,我怎么能把它累积起来,然后把它转到df all set?我不认为这是一个有效的jason。您可以添加更多的细节,如输入消息和输出您想要的。