我有一个从kafka读取的spark流代码,但是我拥有的值是这样的:
"{ 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数据集转换为数据框或数据集,我该怎么做?
答案 0 :(得分:1)
您应该只使用具有以下签名的from_json标准函数和DataStreamWriter.foreachBatch运算符:
video{
position: relative;
}
#overelay{
position: absolute;
width: 100%;
height: 100%;
opacity: 0;
top:0px;
}
使用foreachBatch(function: (Dataset[T], Long) ⇒ Unit): DataStreamWriter[T]
可以将字符串转换为正确的JSON,而from_json
则可以使您每个微批量访问foreachBatch
。
答案 1 :(得分:1)
使用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"))