首页 > 其他分享 >一个pyspark 开发练习实例

一个pyspark 开发练习实例

时间:2024-07-15 18:07:22浏览次数:12  
标签:pyspark df 练习 rdd 实例 算子 get spark Row

实例功能说明:
1,使用pyspark 开发了一个数据ETL ,分析的练习项目。

2,实例功能为,从mysql读取表数据,按照一定规则进行ETL。 以csv格式保存到 hadoop.
并特别的使用了Spark提供的3种API进行统计分析,分别是RDD算子,Dataframe算子, SQL编程算子, 进行了数量统计,

3, 组件版本:
  pyspark: 3.3.1
  python: 3.9
  

# Imports
from pyspark.sql import SparkSession

# Create SparkSession
spark = SparkSession.builder \
    .appName('SparkByExamples.com') \
    .config("spark.jars", "mysql-connector-java-5.1.28.jar") \
    .getOrCreate()

# Read from MySQL Table
table_df = spark.read \
    .format("jdbc") \
    .option("driver", "com.mysql.jdbc.Driver") \
    .option("url", "jdbc:mysql://134.98.6.21:9200/hesc_stm_xhm") \
    .option("dbtable", "temp_user_grid") \
    .option("user", "root") \
    .option("password", "*****dx") \
    .load()

# check  read accessable
# print( table_df.count())  # 总行数

# etl 使用rdd 算子
rdd = table_df.rdd
# print(rdd.first())


rdd1 = rdd.filter(lambda r: Row.asDict(r).get("cityCode") != None).filter(
    lambda r: len(Row.asDict(r).get("cityCode")) == 9)


# print(rdd.map(lambda r: Row.asDict(r).get("cityCode")).take(5))   # ROW类型的元素读取 使用 r(19)读取列有问题

def checkCityCode(str):
    # 判断字符串的格式,前3位为001,而且全为数字
    if (str[:3] == '001') and str.isnumeric():
        return True
    else:
        return False


# 过滤RDD

rdd2 = rdd1.filter(lambda r: checkCityCode(Row.asDict(r).get("cityCode")))  # 函数使用错误
print(rdd2.first())

# 写入文件系统
# target = "D:\program\logs\table_data.txt"
# rdd2.toDF().write.format("CSV").mode("overwrite").options(header=True).save(target)

#  刻意使用了 rdd  df算子 sql 三种算子 ; 统计不同网格的人员数量。
# rdd operator

map = rdd2.map(lambda r: (Row.asDict(r).get("gridCode"), Row.asDict(r).get("id"))).countByKey()
print(map)   #  查询python  rdd api
# mapPartitions, 对分区计算,分区太大不合适,内存不足。 比如写入数据,可以避免建立很多连接。


# df/ds operator   dataset 1.6之后加入, 整合了RDD 的强类型便于使用lambda函数以及 sqpark sql 优化引擎
#  dataframe是 dataset 的 一种。 dataframe 适用python . 以下把rdd转为为 dataframe.继续分组聚合。

df = rdd2.toDF()
df1 = df.groupBy('gridCode').count()  # dataframe  特定编程语言 对结构化数据操作, 也称 无类型dataset算子
df1.show(4)

# 继续转化数据集,保存为spark内临时表,继续用SQL算子进行开发计算 # sql operator df.createOrReplaceTempView('temp_user_grip') df2 = spark.sql("select gridCode, count(id) from temp_user_grip group by gridCode") df2.show(2) spark.stop()

 


标签:pyspark,df,练习,rdd,实例,算子,get,spark,Row
From: https://www.cnblogs.com/gao1261828/p/18303700

相关文章

  • 熊海CMS漏洞练习平台的一次xss、sql注入、越权黑盒思路分析
    简介熊海CMS是由熊海开发的一款功能丰富的网站综合管理系统,广泛应用于个人博客、个人网站以及企业网站,本文章用于黑盒测试,如果需要「源码审计」后台回复【「CMS」】获取即可,精心准备了40多个cms源码漏洞平台,供宝子们学习,一切资源免费image-20240714194841203image-20240......
  • 【嵌入式DIY实例-ESP8266篇】-LCD ST7789显示DS1307 RTC时间数据
    LCDST7789显示DS1307RTC时间数据文章目录LCDST7789显示DS1307RTC时间数据1、硬件准备与接线2、代码实现本文将介绍如何使用ESP8266NodeMCU板和DS1307RTC集成电路构建简单的实时时钟和日历(RTCC),其中时间和日期打印在ST7789TFT显示模块上。S......
  • 【嵌入式DIY实例-ESP8266篇】-LCD1602显示DS1621传感器数据
    LCD1602显示DS1621传感器数据文章目录LCD1602显示DS1621传感器数据1、DS1621介绍2、硬件准备与接线3、代码实现在本文中,介绍如何将ESP8266NodeMCU板(ESP-12E)与DS1621数字温度传感器连接,其中温度值(摄氏度和华氏度)打印在1602LCD屏幕上。本项目......
  • 【嵌入式DIY实例-ESP8266篇】-LCD ST7735显示BME280传感器数据
    LCDST7735显示BME280传感器数据文章目录LCDST7735显示BME280传感器数据1、硬件准备与接线2、代码实现本文中将介绍如何使用ESP8266NodeMCU板(ESP12-E模块)和BME280气压、温度和湿度传感器构建气象站。NodeMCU微控制器(ESP8266EX)从BME280传感......
  • 用python生成词频云图(python实例二十一)
    目录1.认识Python2.环境与工具2.1python环境2.2VisualStudioCode编译3.词频云图3.1代码构思3.2代码实例3.3运行结果4.总结1.认识PythonPython是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,相比其他语......
  • Java练习
    【例3.1】创建主类并调用其主方法在Eclipse下依次创建项目item、包Number和类First。在类体中输入以下代码,实现在控制台上输出"你好Java" 【例3.2】根据身高体重计算BMI指数创建BMlexponent类;声明double型变量height以记录身高,单位为米;声明int型变量weigbl以记录体重......
  • 当代政治制度(练习题)
    当代政治制度(练习题)***Rz整理版仅供参考***以归侨华侨眷中的中上层人士为主组成的民主党派是(D.中国致公党)A.中国民主建国会B.中国民主促进会C.九三学社D.中国致公党中国共产党同各民主党派合作的政治基础是(B.四项基本原则)A.十六字方针B.四项基本......
  • 二十个基于 Python 的 NetworkX 图论算法库入门应用实例
    前言大家好,最近我在美丽的重庆度过了一段美好的学习时光。重庆以其独特的山城地貌和美食闻名,而在火锅和享受美食之余,这里的项目学习激发了我对图论的兴趣。图论是一门既古老又新兴的学科,它在计算机科学、网络分析、社会网络、物流优化等领域有着广泛的应用。而Python的......
  • C++ //练习 14.44 编写一个简单的桌面计算器使其能处理二元运算。
    C++Primer(第5版)练习14.44练习14.44编写一个简单的桌面计算器使其能处理二元运算。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >FileName:ex14.44.cpp >Author: >Mail: >C......
  • C++ //练习 15.5 定义你自己的Bulk_quote类。
    C++Primer(第5版)练习15.5练习15.5定义你自己的Bulk_quote类。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >FileName:ex15.3.cpp >Author: >Mail: >CreatedTime:Fri12J......