![](/img/trans.png)
[英]How to read json string from kafka topic into pyspark dataframe?
[英]How to process the dataframe which was read from Kafka Topic using Spark Streaming
我能够通过生产者将 Twitter 数据流式传输到我的 Kafka 主题中。 当我尝试通过默认的 Kafka 消费者进行消费时,我也能够看到这些推文。
但是当我尝试使用 Spark Streaming 来使用它并进一步处理时,我无法找到可供参考的资源。 这就是我的消费者的样子:
from pyspark.sql import SparkSession
import time
spark = SparkSession.builder.appName('LinkitTest').getOrCreate()
df = spark \
.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "localhost:9092") \
.option("subscribe", "tweets") \
.option("startingOffsets", "earliest") \
.load()
#df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
print(df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)"))
query = df.writeStream.format("console").start()
import time
time.sleep(10) # sleep 10 seconds
query.stop()
即使当我执行spark-submit
时,我也会看到主题中的推文,但值不可读
spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.1 kafka_consumer.py
我无法弄清楚如何使用我拥有的数据框至少打印列值(或本例中的推文)? 可以申请任何帮助
更新
我能够在控制台上打印这些值,但如您所见,它不可读。 如何将其转换为可读的字符串?
query = df.select(col("value"))\
.writeStream\
.format("console")\
.start()
代替
print(df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)"))
你要
df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)").show()
但那是针对批处理数据帧,而不是流式数据帧。 对于流式传输,则需要在写入之前进行投射。
df.select(col("value").cast("string"))\
.writeStream\
.format("console")\
推特数据通过生产者进入卡夫卡
为此,您不需要 Spark。 你可以直接使用 tweepy 和kafka-python
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.