首页 > 其他分享 >1/31 学习进度笔记

1/31 学习进度笔记

时间:2024-01-31 18:15:38浏览次数:24  
标签:province count df 31 top3 笔记 receivable 进度 storeProvince

今日完成了商单案例:

源码:

# coding:utf8
from pyspark import StorageLevel
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.types import StringType

if __name__ == '__main__':
spark = SparkSession.builder.appName("test").master("local[*]").\
config("spark.sql.warehouse.dir", "hdfs://node1:8020/user/hive/warehouse").\
config("hive.metastore.uris", "thrift://node1:9083").\
getOrCreate()
sc = spark.sparkContext

df = spark.read.format("json"). \
load("../../data/mini.json").\
dropna(thresh=1, subset=['storeProvince']).\
filter("storeProvince != 'null'").\
filter("receivable < 10000").\
select("storeProvince", "storeID", "receivable", "dateTS", "payType")
# TODO: 需求1:各省销售额的统计
province_sale_df = df.groupBy("storeProvince").\
agg(
F.round(F.sum(df['receivable']),2).alias("receivable")
).\
orderBy("receivable", ascending=False)

province_sale_df.show(truncate=False)

# province_sale_df.write.mode("overwrite"). \
# format("jdbc"). \
# option("url", "jdbc:mysql://node1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8").\
# option("dbtable", "province_sale").\
# option("user", "root").\
# option("password", "1234").\
# option("encoding", "utf8").\
# save()
#
# province_sale_df.write.mode("overwrite").saveAsTable("default.province_sale","parquet")

# TODO: 需求2:T0P3销售省份中,有多少店铺达到过日销售额1000+
top3_province_df = province_sale_df.limit(3).select("storeProvince").withColumnRenamed("storeProvince","top_store")

df_top3_province_joined = df.join(top3_province_df, on= df['storeProvince'] == top3_province_df['top_store'])
df_top3_province_joined.show()
df_top3_province_joined.persist(StorageLevel.MEMORY_AND_DISK)


province_hot_store_count_df = df_top3_province_joined.\
groupby(df['storeProvince'], df['storeID'],
F.from_unixtime(df['dateTS'].substr(0, 10), "yyyy-MM-dd").alias("day")). \
sum("receivable").withColumnRenamed("sum(receivable)", "money").\
filter("money > 1000").\
groupby("storeProvince").\
count().\
orderBy("count", ascending=False).show()

# TODO: 需求3: T0P3省份中,各省的平均单单价
df_top3_province_joined.groupby("storeProvince").\
avg("receivable").\
withColumnRenamed("avg(receivable)", "avg_money"). \
withColumn("avg_money", F.round("avg_money", 2)). \
orderBy("avg_money", ascending=False).\
show()


# TODO: 需求4: T0P3省份中,各个省份的支付类型比例

def udf_func(percent):
return str(round(percent * 100, 2)) + "%"

my_udf = F.udf(udf_func, StringType())
top3_province_payType_count = df_top3_province_joined.groupby("storeProvince").count().\
withColumnRenamed("storeProvince", "storeProvince_1").\
withColumnRenamed("count", "count_1")

df4 = df_top3_province_joined.groupby("storeProvince", "payType").\
count().\
join(top3_province_payType_count, on=top3_province_payType_count['storeProvince_1'] == df_top3_province_joined['storeProvince'])
df4.withColumn("percent", df4['count'] / df4['count_1']).\
withColumn("percent", my_udf("percent")).\
select("storeProvince", "payType","percent").\
show()


"""
storeProvince 店铺所在省份
storeID 店铺ID
dateTS 订单日期
receivable 收款金额
payType 付款类型
"""

标签:province,count,df,31,top3,笔记,receivable,进度,storeProvince
From: https://www.cnblogs.com/yuncannotjava/p/17999843

相关文章

  • 阅读笔记
    《人月神话》是软件工程领域的一部经典之作,它以其独特的视角和深刻的洞察力,让我对软件开发有了更加全面和深入的认识。在阅读这本书的过程中,我深深地被作者对软件开发的独到见解所吸引。作者通过自己在IBM公司从事大型软件项目开发的亲身经历,向我们揭示了软件开发过程中的种种困......
  • 阅读笔记2
    阅读完《程序员的修炼之道:从小工到专家》第七章后,我对掌握编程语言的重要性有了更深入的理解。这一章节详细探讨了如何选择适合自己的编程语言,以及如何精通掌握一门或多门编程语言。首先,作者强调了编程语言在程序员职业生涯中的重要性。编程语言是程序员表达思想、解决问题的重要......
  • 20240131
    A.选车站枚举\(x_i<0\)可以\(\mathcal{O}(\sqrt{x_i})\)的计算出最小的\(x_j>0\)使得\(-x_ix_j\)为一个平方数,再枚举倍数即可//Author:xiaruize#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineullunsignedlonglong#defineALL(a......
  • 性能测试学习笔记
    一、性能测试的基本操作1、概念:体现当前服务器到底能不能带动开发的软件2、服务器优化:升级配置(服务器升级内容、cpu),横向扩容(多台服务器)3、并发:  二、性能测试的调优(具体怎么调,由开发/运维去做),测试指导开发问题发生的位置 ......
  • 0131取Data路径下的文件
      f'{Path(file).resolve().parent.parent}{os.path.sep}data{os.path.sep}{name}' 这句话是Python代码,它使用了几个模块和方法来构造一个文件系统路径。下面我们逐个分解这行代码:Path(__file__):这里使用了Path类,它来自Python的pathlib模块,使得文件系统路径操作更加易于处......
  • kali学习笔记-06-Webshell文件上传漏洞使用
    kali学习笔记-06-Webshell文件上传漏洞使用KaliLinux网络安防一、使用weevely制作一句话木马脚本在KaliLinux的终端中输入命令weevely,可以从错误提示中看到基本的使用方法。二、配置OWASP靶机三、参考文献WebShell文件上传漏洞.3......
  • python网络编程笔记(一)Socket 编程入门
    一:Socket简介套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSDUnix。因此,有时人们也把套接字称为“伯克利套接字"或"BSD套接字”。一开始,套接字被设计用在同-台主机上多个应用程序之间的通讯BSDSocket接口是TCP/IP网络的API在Linux,Unix和W......
  • kali学习笔记-05-DVWA XSS跨站脚本攻击
    kali学习笔记-05-DVWA XSS跨站脚本攻击KaliLinux网络安防一、反射型XSS攻击在OWASP的DVWA上,选中XSSreflected页面,在输入框内输入张三,页面反应正常。尝试输入一句script脚本。<script>alert('xss')</script>出现了如下的系统弹框,也就意味着后端服务器没有对特殊字符做......
  • Tomcat学习笔记
    1.Tomcat总体架构Tomcat要实现2个核心功能:处理Socket连接,负责网络字节流与Request和Response对象的转化。加载和管理Servlet,以及具体处理Request请求。Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理......
  • CMake 笔记
    cmake笔记目录cmake笔记CMake命令行选项常用CMake语法特殊变量变量常用基本测试安装其它其它基本使用FetchContentvcpkgwindowslinux及wslwindows配环境还能不能再恶心点......