以JSON格式向Spark结构化流式消息添加模式

时间:2018-03-11 16:52:02

标签: apache-spark pyspark spark-structured-streaming

我正在实施一个Spark Structured Streaming作业,我将以JSON格式消费来自Kafka的消息。

def setup_input_stream(kafka_brokers, spark, topic_name):
    return spark.readStream.format("kafka") \
        .option("kafka.bootstrap.servers", kafka_brokers) \
        .option("subscribe", topic_name) \
        .load()

然后,我能够以包含JSON有效负载的String形式从Kafka消息中提取value字段。

deserialized_data = data_stream \
    .selectExpr("CAST (value AS STRING) as json") \
    .select(f.from_json(f.col("json"), schema=JSON_SCHEMA).alias("schemaless_data")) \
    .select("schemaless_data.payload")

一旦我有了这个有效负载列,我就很难找到让Spark自动推断其架构并将其转换为正确的DataFrame的方法。

我知道我可以对包含我的有效负载模式的StructType进行硬编码,但由于我想使用这个通用实现来接收来自不同RDBMS表的数据(每个表在其单独的主题中),我不会# 39;我真的想要对每个可能的表的模式进行硬编码。

可以以某种方式推断消息模式吗?

0 个答案:

没有答案