IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> PySpark Structured Streaming实时消费kafka数据写入MongoDB -> 正文阅读

[大数据]PySpark Structured Streaming实时消费kafka数据写入MongoDB

KafkaProducer生产数据格式

向kafka发送数据的格式

{"u_id":"11629939865","timestamp":1622955136,"channel_id":"","detail":{"order_id":"6b3a5eb82a1a","goods_id":1004,"goods_name":"coin","amount":819}}

解析数据所对应的 schema

schema = T.StructType() \
        .add("u_id", T.StringType()) \
        .add("timestamp", T.IntegerType()) \
        .add("channel_id", T.StringType()) \
        .add("detail", T.StructType()
             .add("order_id", T.StringType()) \
             .add("goods_id", T.IntegerType()) \
             .add("goods_name", T.StringType())
             .add("amount", T.IntegerType()))

python 代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pyspark.sql import functions as F
from pyspark.sql import SparkSession
from common.config import config
from common.environment import SparkEnv
from pyspark.sql import types as T


if __name__ == '__main__':
   	spark = SparkSession \
            .builder \
            .master("local[6]") \
            .appName("Python Spark basic example") \
            .getOrCreate()

    spark.sparkContext.setLogLevel("Error")

    df = spark.readStream \
        .format("kafka") \
        .option("kafka.bootstrap.servers", f"{ip}:9092") \
        .option("subscribe", f"{topic}") \
        .load()

    words = df.selectExpr("CAST(topic AS STRING)", "CAST(value AS STRING)")
    # 通过from_json,定义schema来解析json
    res = words.withColumn("data", F.from_json("value", schema)).select("data.*") \
        .select("unique_id", "timestamp", "channel_id", "detail.*") \
        .groupBy("unique_id").agg(F.sum("amount").alias("pay_amount"))

    console_query = res.writeStream \
        .format("console") \
        .trigger(processingTime='5 seconds') \
        .option("truncate", "false") \
        .outputMode("update") \
        .start()


    def write(df, batch_id):
        df.write.format("com.mongodb.spark.sql") \
            .mode("append") \
            .option("spark.mongodb.output.uri", f"mongodb://{ip}:27017") \
            .option("database", "databaseName") \
            .option("collection", "StructuredStreaming").save()

    query = res.writeStream \
        .option("checkpointLocation", "cp") \
        .outputMode("complete").foreachBatch(write).trigger(processingTime='1 minute').start()

    query.awaitTermination()
    console_query.awaitTermination()
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 09:24:49  更:2021-08-28 09:26:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:47:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码