簡體   English   中英

如何從kafka主題中讀取json字符串到pyspark dataframe?

[英]How to read json string from kafka topic into pyspark dataframe?

我正在嘗試將來自 Kafka 主題的 json 消息讀取到 PySpark dataframe 中。 我的第一反應是這樣的:

consumer = KafkaConsumer(TOPIC_NAME,
                             consumer_timeout_ms=9000,
                             bootstrap_servers=BOOTSTRAP_SERVER,
                             auto_offset_reset='earliest',
                             enable_auto_commit=True,
                             group_id=str(uuid4()),
                             value_deserializer=lambda x: x.decode("utf-8"))
message_lst = []
    for message in consumer:
        message_str = message.value.replace('\\"', "'").replace("\n", "").replace("\r", "")
        message_dict = json.loads(message_str)
        message_lst.append(message_dict)

    messages_json = sc.parallelize(message_lst)
    messages_df = sqlContext.read.json(messages_json)

我想知道有沒有辦法使用 Spark 結構化流或類似的東西來獲得相同的 dataframe。 有人可以幫忙嗎? UPD:我對結構化流的嘗試是這樣的:

df = spark \
        .readStream \
        .format("kafka") \
        .option("kafka.bootstrap.servers", f"{BOOTSTRAP_SERVER}") \
        .option("subscribe", TOPIC_NAME) \
        .load()

它退出並出現以下錯誤: pyspark.sql.utils.AnalysisException: Failed to find data source: Kafka. Please deploy the application as per the deployment section of "Structured Streaming + Kafka Integration Guide". pyspark.sql.utils.AnalysisException: Failed to find data source: Kafka. Please deploy the application as per the deployment section of "Structured Streaming + Kafka Integration Guide". UPD:我閱讀了異常文本中說明的指南,它建議安裝此庫“spark-sql-kafka-0-10_2.12”,但我找不到。 有人知道嗎? UPD 2:我設法添加了所需的 package 並嘗試讀取來自 kafka 的消息:

df = spark \
...         .readStream \
...         .format("kafka") \
...         .option("kafka.bootstrap.servers", f"{BOOTSTRAP_SERVER}") \
...         .option("subscribe", TOPIC_NAME) \
...         .load()
df.writeStream.outputMode("append").format("console").start().awaitTermination()

我使用與以前相同的消費者。 這里的問題是它只讀取在 start() 調用之后寫入的消息。 如何讀取在給定時間寫入的所有消息並獲得 dataframe 的結果? 另外,任何人都可以舉一個 load_json() 模式的例子嗎? 如果我的問題很愚蠢,我很抱歉,但我在 Python 中找不到任何示例。

主文檔中所述,您缺少 kafka package

./bin/spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.1.2 ...

確保此處列出的 3.1.2 與您自己的 Spark 版本匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM