1

我使用 Spark 1.6 和 Kafka 0.8.2.1。

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

为此,我应该知道所获取数据的架构,有什么方法可以做到这一点,或者我们可以通过使用字段名从流中获取值吗?

4

1 回答 1

0

TL;DR直接不可能(尤其是旧的Spark 1.6),但也不是不可能的。

Kafka 看到的是字节,这正是 Spark Streaming 所期望的。您必须以某种方式在固定字段上传递一些额外信息才能获取架构(可能作为 JSON 编码的字符串)并解码其他字段。它不是开箱即用的,但肯定是可行的。


作为建议,我会发送一条消息,其中value字段始终是具有模式(值字段)和值本身(JSON 格式)的双字段数据结构。

然后,您可以使用from_json函数之一:

from_json(e: Column, schema: StructType): Column将包含 JSON 字符串的列解析为具有指定架构的 StructType。

Givenfrom_json是在 Spark 2.1.0 中添加的,您必须注册自己的自定义用户定义函数 (UDF),它将字符串值反序列化为相应的结构(看看from_json 是如何进行的并复制它)。

请注意,DataTypeobject 带有fromJson方法,该方法可以将 JSON 编码的字符串“映射”为DataType描述您的模式的字符串。

fromJson(json: String): 数据类型

于 2017-05-28T18:37:54.030 回答