PySpark操作MySQL及DataFrame常用操作整理

一、连接MySQL数据库

# 配置MySQL连接参数
prop = {'user': 'root', 'password': '123456', 'driver': 'com.mysql.cj.jdbc.Driver'}
url = 'jdbc:mysql://localhost:3306/people'  # 数据库URL

二、从MySQL读取数据

# 读取表数据到DataFrame
df = spark.read.jdbc(properties=prop, url=url, table='people_info')
df.show()  # 展示数据

三、向MySQL写入数据

# 1. 读取CSV数据源
df1 = spark.read.csv('file:///home/spark/mydata/people_info.csv', schema='id long, gender string, height int')

# 2. 创建临时视图
df1.createOrReplaceTempView('my_people_info')

# 3. 筛选前10条记录
df2 = spark.sql('SELECT * FROM my_people_info LIMIT 10')

# 4. 追加写入MySQL表
df2.write.jdbc(properties=prop, url=url, table='people_info', mode='append')

# 5. 验证写入结果
spark.read.jdbc(prop, url, 'people_info').show()  # 重新读取并展示

四、从文件读取不同格式数据

# 读取JSON文件
spark.read.json('file:///home/spark/mydata/people_info.json').show()
spark.read.format('json').load('file:///home/spark/mydata/people_info.json').show()

# 读取Parquet文件
spark.read.load('file:///usr/local/spark/examples/src/main/resources/users.parquet').show()

五、DataFrame常用操作
1. 数据筛选(where()/filter()

df = spark.read.csv('file:///home/spark/mydata/stus.csv', header=True, inferSchema=True)

# 条件筛选示例
df.where('age > 10').show()                          # SQL表达式
df.where('age > 10 AND score > 80').show()           # 多条件AND
df.where(df.age > 10).show()                         # 列表达式
df.where((df.age > 10) & (df.score > 80)).show()     # 位运算组合条件

2. 数据排序(sort()/orderBy()

df.sort('age').show()                              # 默认升序
df.sort(df.age.desc()).show()                      # 降序排列
df.sort(df.age.desc(), df.score.asc()).show()      # 多列不同排序
df.sort(['age', 'score'], ascending=[True, False]).show()  # 指定每列排序方式

3. 数据分组聚合(groupBy()

# 常用聚合函数:count(), avg(), max(), min(), sum()
df.groupBy('age').count().show()                   # 按年龄分组计数
df.groupBy('gender').avg('height').show()          # 按性别计算平均身高
df.groupBy(df.age > 10).avg('score').show()        # 按条件分组聚合

4. 列操作(select()/selectExpr()

df.select('*').show()                             # 选择所有列
df.select('name', 'age').show()                   # 选择指定列
df.selectExpr('name', 'age * 2 AS new_age').show() # 表达式计算并重命名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值