将数据从kafka的某个主题中抽取出来,再将数据放入另一个主题中
一、导入jar包
通过百度网盘分享的文件:python-kafka
链接:https://pan.baidu.com/s/1q2UlOJFBNNuhRC87AlAACg?pwd=c6dy
提取码:c6dy
将这六个jar包放入本地pyspark中jars下
二、案例编写
首先需要生成数据,将数据源源不断的导入topicA中,再使用spark读取kafka中的数据,然后将清洗过的数据导入etlTopic中
import os
from pyspark.sql import SparkSession
from pyspark.sql.functions import explode
import pyspark.sql.functions as F
if __name__ == '__main__':
os.environ['JAVA_HOME'] = 'E:/java-configuration/jdk-8'
# 配置Hadoop的路径,就是前面解压的那个路径
os.environ['HADOOP_HOME'] = 'E:/applications/bigdata_config/hadoop-3.3.1/hadoop-3.3.1'
# 配置base环境Python解析器的路径
os.environ['PYSPARK_PYTHON'] = 'C:/Users/35741/miniconda3/python.exe'
# 配置base环境Python解析器的路径
os.environ['PYSPARK_DRIVER_PYTHON'] = 'C:/Users/35741/miniconda3/python.exe'
# 创建一个sparkSession对象
spark = SparkSession.builder.appName("kafkaDemo").getOrCreate()
kafkaDf = spark \
.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "bigdata01:9092") \
.option("subscribe", "topicA") \
.option("startingOffsets", "latest") \
.load()
# 这个就是为了 筛出想要的数据
dataDf = kafkaDf.selectExpr("CAST(value AS STRING)")
dataDf.createOrReplaceTempView("tmp")
etlDf = spark.sql("""
select * from tmp where value like "%success%"
""")
etlDf.writeStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "bigdata01:9092") \
.option("topic", "etlTopic") \
.option("checkpointLocation", "../../resources/ckp") \
.start().awaitTermination()
spark.stop()