1. 流程概述
针对不同模块的数据(相互独立),启用多线程分别写到parquet文件的不同group下,然后对不同group进行union整合,产出新的parquet文件,最终落地到hive。
test.py
# coding=utf-8
import datetime
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
import multiprocessing
if __name__ == '__main__':
spark = SparkSession \
.builder \
# .appName("Python Spark SQL basic example") \
# .config("user active", "some-value") \
.enableHiveSupport() \
.getOrCreate()
date = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
# date='2021-08-09'
p1 = multiprocessing.Process(target=user_click(spark, date))
p2 = multiprocessing.Process(target=user_life_cycle(spark, date))
p1.start()
p2.start()
spark.stop()
执行 python test.py
2. 模块拆解
2.1 读parquet文件
采用parquet进行中间数据存储,parquet文件的优势在于schema在文件中,避免中间表反复修改。
注意,单引号与双引号的使用!
三引号下应用三个"\\\"来进行转义!!!
def read_parquet(spark, pt):
# 7天前
last_7dt = (datetime.datetime.strptime(str(pt), "%Y-%m-%d")+ datetime.timedelta(days=-(7 - 1))).strftime("%Y-%m-%d")
df = spark.read.parquet("/user/db_dmp/db_dmp.db/lx_chat_detail/")
.filter("pt>='{0}' and pt<='{1}'"
.format(last_7dt, pt))
.select("uid", "fuid", "chatHour", "pt")
.dropDuplicates()
df.show(2)
# 注册临时表,进行查询
df.createOrRe

该博客介绍了如何使用Python的multiprocessing库并结合PySpark来实现多线程处理不同模块的数据,分别写入Parquet文件的不同group,然后通过union整合各个group,最后将结果写入Hive表。内容涵盖了读取和写入Parquet文件、数据处理、Hive表的写入以及Parquet文件的group合并。整个流程展示了大数据处理中的数据整合和存储策略。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



