繁体   English   中英

如何使用Spark Streaming和Python使用来自Kafka的JSON记录?

[英]How to consume JSON records from Kafka using Spark Streaming and Python?

我用JSON格式的记录创建了一个Kafka主题。

我可以使用kafka-console-consumer.sh来使用这些JSON字符串:

./kafka-console-consumer.sh --new-consumer \
    --topic test \
    --from-beginning \
    --bootstrap-server host:9092 \
    --consumer.config /root/client.properties

如何在Python中使用Spark Streaming做到这一点?

h,为什么Python不支持Scala? 然后,您的家庭练习将是将以下代码重写为Python,然后;-)

来自高级资源

从Spark 2.1.1开始,在这些来源中,Python API中提供了Kafka,Kinesis和Flume。

基本上,该过程是:

使用Spark spark-streaming-kafka-0-10_2.11库(如Spark Streaming + Kafka集成指南(Kafka代理版本0.10.0或更高版本)中所述)使用KafkaUtils.createDirectStream 阅读来自Kafka主题的消息

import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.streaming.kafka010._
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe

val kafkaParams = Map[String, Object](
  "bootstrap.servers" -> "localhost:9092,anotherhost:9092",
  "key.deserializer" -> classOf[StringDeserializer],
  "value.deserializer" -> classOf[StringDeserializer],
  "group.id" -> "use_a_separate_group_id_for_each_stream",
  "auto.offset.reset" -> "latest",
  "enable.auto.commit" -> (false: java.lang.Boolean)
)

val topics = Array("topicA", "topicB")
val stream = KafkaUtils.createDirectStream[String, String](
  streamingContext,
  PreferConsistent,
  Subscribe[String, String](topics, kafkaParams)
)

使用map运算符将ConsumerRecords复制到值,这样您就不会遇到序列化问题。

stream.map(record => (record.key, record.value))

如果您不发送密钥,那么仅record.value就足够了。

stream.map(record => record.value)

将字符串消息转换为JSON一旦有了值,就可以使用from_json函数:

from_json(e:列,架构:StructType)将包含JSON字符串的列解析为具有指定架构的StructType 如果是不可解析的字符串,则返回null

该代码将如下所示:

...foreach { rdd =>
  messagesRDD.toDF.
    withColumn("json", from_json('value, jsonSchema)).
    select("json.*").show(false)
}

完成!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM