[英]Read from kafka then writeStream to json file, but only found one message in HDFS json file
只需设置一个 hadoop/kafka/spark,1 个节点的演示环境。 在 pyspark 中,我尝试读取(.readStream)Kafka 消息并将其写入(.writeStream)到 hadoop 中的 json 文件中。 奇怪的是,在 hadoop“输出/测试”目录下,我可以找到一个已创建的 json 文件,但仅在一条消息中。 来自 kafka 的所有新消息都不会更新 json 文件。 但我想将来自 Kafka 的所有消息存储到一个 json 文件中。
我已尝试将接收器类型设置为 console(writeStream.format("console")) 或 kafak(writeStream.format("kafka")),它正常工作。 有什么建议或意见吗? 接下来是示例代码。
schema = StructType([StructField("stock_name",StringType(),True),
StructField("stock_value", DoubleType(), True),
StructField("timestamp", LongType(), True)])
line = spark \
.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "127.0.1.1:9092") \
.option("subscribe", "fakestock") \
.option("startingOffsets","earliest")\
.load()\
.selectExpr("CAST(value AS STRING)")
df=line.select(functions.from_json(functions.col("value")\
.cast("string"),schema).alias("parse_value"))\
.select("parse_value.stock_name","parse_value.stock_value","parse_value.timestamp")
query=df.writeStream\
.format("json")\
.option("checkpointLocation", "output/checkpoint")\
.option("path","output/test")\
.start()
不可能将所有记录存储在一个文件中。 Spark 作为 Kafka 消费者定期轮询数据批次,然后将这些批次写入唯一文件。
在不知道主题中有多少记录的情况下,很难说 output 路径中应该有多少记录,但是您的代码看起来还不错。 然而,Parquet 更推荐 output 格式而不是 JSON。
另外值得一提的是,Kafka Connect 有一个 HDFS 插件,只需要编写一个配置文件,不需要 Spark 解析代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.