pyspark之Structured Streaming kafka

#kafka数据生成脚本  spark_ss_kafka_producer.py

import random
import string
import time
from kafka import KafkaProducer

if __name__ == '__main__':
    producer = KafkaProducer(bootstrap_servers=['master:9092','slave1:9092','slave2:9092'])

    while True:
        s2 = (random.choice(string.ascii_lowercase) for _ in range(2))
        word = ''.join(s2)
        value = bytearray(word,'utf-8')
        producer.send('test',value=value).get(timeout=10)
        time.sleep(0.1)

#消费端spark消费kafka数据 spark_ss_kafka_consumer.py
from pyspark.sql import SparkSession 
if __name__ == '__main__':
    spark = SparkSession.builder.getOrCreate()
    lines = spark.readStream.format('kafka').option('subscribe','test').option('bootstrap-servers','master:9092 slave1:9092 slave2:9092').load().selectExp("CAST(value AS STRING)")
#selectExp():将kafka下test主题下的value转化为STRING类型
#selectExp()和select类似 
#此处如果用select(col('value').cast('string')) col来自spark.sql.functions
#selectExp参数为string
    wordCounts = lines.groupBy("value").count()
    wordCounts.selectExp("CAST(value AS STRING) as key","CONCAT(CAST(value AS STRING),':',CAST(count AS STRING)) as value").writeStream.outputMode("complete").format("kafka").option("topic","test_count").option("kafka.bootstrap.servers","master:9092 slave1:9092 slave2:9092").option("checkpointLocation","file:///opt/software/tmp/kafka-sink-cp").trigger(processintTime="8 seconds").start().awaitTermination()

"""
kafka读参数配置
option配置:
    kafka.bootstrap.servers 
    subscribe:读取主题
format:kafka
selectExp():必须将value转为字符串
"""
"""
kafka写参数配置
option配置:
    kafka.bootstrap.servers
    topic:写入主题
format:kafka
checkpointLocaiton:检查点位置
"""

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值