簡體   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