如何在运行时在DStream中查找值的模式?

时间:2017-05-28 18:25:49

标签: apache-spark apache-kafka spark-streaming apache-spark-1.6

我使用Spark 1.6和Kafka 0.8.2.1。

我正在尝试使用Spark Streaming从Kafka获取一些数据,并对该数据进行一些操作。

为此,我应该知道所获取数据的模式,是否有某种方法可以使用字段名称从流中获取值?

1 个答案:

答案 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