结构化流媒体是python+spark 3.1.1+kafka的唯一选项吗



流式集成的文档不包含python部分。这是否意味着不支持python?

另一方面,在结构化流中,Kafka将所有内容都放在一两列(键和值(中,sql操作在这里有点开箱即用的意义。引入纯Python处理的唯一方法是UDF,这很昂贵。这是真的吗?

很多人都在Kafka中使用结构化流媒体,并没有遇到任何问题。Spark把所有东西都放在这两列中,原因是它是Kafka的工作方式(以及其他系统,如EventHubs、Kinesis等(——两者都是关键和关键;从Kafka的角度来看,值只是二进制blob,Kafka对里面的内容一无所知——这取决于开发人员来决定在blob中放什么——纯字符串、Avro、JSON等。

Kafka&结构化流看起来如下(一切都是通过Spark API完成的,不需要使用UDF,并且非常高效(:

  • 使用spark.readStream读取数据
  • value(可能还有key(强制转换为特定类型,例如,如果使用JSON,则为string;如果使用Avro,则保留为二进制
  • 取决于格式:
    • 如果使用JSON,请使用from_JSON函数将字符串解码为Struct
    • 如果使用Avro,则使用from_Avro函数
  • 将有效负载中的字段提升到数据帧的顶层

例如,对于JSON作为值:

json_schema = ... # put structure of your JSON payload here
df = spark.read
.format("kafka")
.options(**kafka_options)
.load()
.withColumn("value", F.col("value").cast("string"))
.withColumn("json", F.from_json(F.col("value"), json_schema)
.select("json.*", "*")

最新更新