我使用Spark 1.6和Kafka 0.8.2.1。
我正在尝试使用Spark Streaming从Kafka获取一些数据,并对该数据进行一些操作。
为此,我应该知道所获取数据的模式,是否有某种方法可以使用字段名称从流中获取值?
答案 0 :(得分:0)
TL; DR 它可以直接不(特别是旧的Spark 1.6),但也不是不可能。
Kafka看到字节和Spark Streaming所期望的。您必须以某种方式传递有关固定字段的一些额外信息以获取架构(可能作为JSON编码的字符串)并解码其他字段。它不是开箱即用的,但肯定是可行的。
作为建议,我发送一条消息,其中value
字段始终是具有模式(值字段)和值本身(以JSON格式)的双字段数据结构。 / p>
然后您可以使用from_json函数之一:
from_json(e:Column,schema:StructType):Column 将包含JSON字符串的列解析为具有指定架构的StructType。
鉴于在Spark 2.1.0中添加了from_json
,您必须注册自己的自定义用户定义函数(UDF),该函数将字符串值反序列化为相应的结构(仅了解from_json
does it的方式并将其复制。
请注意,DataType
对象附带fromJson方法,可以" map"一个JSON编码的字符串,用于描述您的模式的DataType
。
fromJson(json:String):DataType