spark:数据的关联与合并、缓存和checkpoint

文章目录

  • [1. 数据的关联与合并](#1. 数据的关联与合并)
    • [1.1 join关联](#1.1 join关联)
      • [1.1.1 内关联](#1.1.1 内关联)
      • [1.1.2 左关联](#1.1.2 左关联)
      • [1.1.3 右关联](#1.1.3 右关联)
    • [1.2 Union合并](#1.2 Union合并)
  • [2. 缓存和checkpoint](#2. 缓存和checkpoint)

1. 数据的关联与合并

1.1 join关联

students表数据:

1.1.1 内关联

内关联只返回两个 DataFrame 中在连接键上匹配的行。

python 复制代码
# join 关联
from pyspark.sql import SparkSession

ss = SparkSession.builder.getOrCreate()

#读取文件数据转为df
df1 = ss.read.csv('hdfs://node1/data/students.csv',header=True,sep=',')
df2 = ss.read.csv('hdfs://node1/data/students2.csv',header=True,sep=',')

#join 关联
df_join = df1.join(df2,'id') #默认时内关联
df_join.show()

运行结果:

1.1.2 左关联

左关联以左 DataFrame 为基础,返回左 DataFrame 的所有行以及在右 DataFrame 中与左 DataFrame 连接键匹配的行。如果右 DataFrame 中没有匹配的行,则相应的列将填充为 null

python 复制代码
# join 关联
from pyspark.sql import SparkSession

ss = SparkSession.builder.getOrCreate()

#读取文件数据转为df
df1 = ss.read.csv('hdfs://node1/data/students.csv',header=True,sep=',')
df2 = ss.read.csv('hdfs://node1/data/students2.csv',header=True,sep=',')
#左关联
df_left_join = df1.join(df2,'id','left')
df_left_join.show()

运行结果:

1.1.3 右关联

右关联以右 DataFrame 为基础,返回右 DataFrame 的所有行以及在左 DataFrame 中与右 DataFrame 连接键匹配的行。如果左 DataFrame 中没有匹配的行,则相应的列将填充为 null

python 复制代码
# join 关联
from pyspark.sql import SparkSession

ss = SparkSession.builder.getOrCreate()

#读取文件数据转为df
df1 = ss.read.csv('hdfs://node1/data/students.csv',header=True,sep=',')
df2 = ss.read.csv('hdfs://node1/data/students2.csv',header=True,sep=',')

#右关联
df_right_join = df1.join(df2,'id','right')
df_right_join.show()

运行结果

1.2 Union合并

在 Spark 中,union用于合并两个或多个相同数据结构的数据集(DataFrame 或 Dataset)。

python 复制代码
# union合并  上下行合并要保证字段数量和类型一致
from pyspark.sql import SparkSession

ss = SparkSession.builder.getOrCreate()

# 读取文件数据转为df
df1 = ss.read.csv('hdfs://node1:8020/data/students.csv',header=True,sep=',')
df2 = ss.read.csv('hdfs://node1:8020/data/students2.csv',header=True,sep=',')

# 合并
df_union = df1.union(df2)
df_union.show(100)

df_unionAll = df1.unionAll(df2)  # 和union效果一样
df_unionAll.show(100)

# 合并后去重
df_distinct =  df_union.distinct()
df_distinct.show(100)

注意:union合并时,上下行合并要保证字段数量和类型一致。

2. 缓存和checkpoint

python 复制代码
# 缓存和checkpoint
from pyspark.sql import SparkSession

ss = SparkSession.builder.getOrCreate()

# 指定checkpoint位置
sc = ss.sparkContext
sc.setCheckpointDir('hdfs://node1:8020/df_checpoint')

# 读取文件数据转为df
df1 = ss.read.csv('hdfs://node1:8020/data/students.csv',header=True,sep=',')

# df1数据缓存
df1.persist()

# df1数据checkpoint
df1.checkpoint()

# df中的缓存和checkpoint不需要触发执行,内部会自动触发
相关推荐
怪兽20143 分钟前
Redis过期键的删除策略有哪些?
java·数据库·redis·缓存·面试
AAA小肥杨5 小时前
基于k8s的Python的分布式深度学习训练平台搭建简单实践
人工智能·分布式·python·ai·kubernetes·gpu
迎風吹頭髮7 小时前
Linux内核架构浅谈49-Linux per-CPU页面缓存:热页与冷页的管理与调度优化
linux·缓存·架构
爬山算法7 小时前
Redis(73)如何处理Redis分布式锁的死锁问题?
数据库·redis·分布式
IT小哥哥呀8 小时前
电池制造行业数字化实施
大数据·制造·智能制造·数字化·mom·电池·信息化
Xi xi xi8 小时前
苏州唯理科技近期也正式发布了国内首款神经腕带产品
大数据·人工智能·经验分享·科技
码农多耕地呗8 小时前
力扣146.LRU缓存(哈希表缓存.映射+双向链表数据结构手搓.维护使用状况顺序)(java)
数据结构·leetcode·缓存
yumgpkpm9 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
祈祷苍天赐我java之术9 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
UMI赋能企业10 小时前
制造业流程自动化提升生产力的全面分析
大数据·人工智能