PySpark学习笔记5-SparkSQL


sparkSql的数据抽象有两种。

一类是data set适用于java和Scala

一类是data frame适用于java,Scala,python

将r d d转换为data frame

python 复制代码
#方式一
df = spark.createDataFrame(rdd,schema=['name','age'])
#方式二
schema = Structtype().
add('id',integertype(),nullable=False).
add('name',StringType(),nullable=True)
df = spark.createDataFrame(rdd, schema)
#方式三
df = rdd.toDF(['id','name'])
df = rdd.toDF(schema)

DSL风格

python 复制代码
show()方法,默认展示二十行
printSchema()方法,展示d f的信息
展示制定列
df.select('id','name').show()
df.select(['id','name']).show()
df.select(df['id'],df['name']).show()
过滤数据
df.filter('score<90').show()
df.filter(df['score']<99).show()
df.where('score < 99').show()
df.where(df['score']<99).show()
分组展示
df.groupBy('subject').count().show()
df.groupBy(df['subject']).count().show()

SQL风格

python 复制代码
注册成表
df.createTempView('score')临时表
df.createOrReplaceTempView('score')注册临时表存在就替换
df.createGlobalTempView('score')注册一个全局表
注册好临时表之后可以执行s q l查询
df2 = spark.sql("""select * from score where score < 99""")
df2.show()

词频统计案例

python 复制代码
sql风格处理
rdd = sc.textFile('./a.txt').flatMap(lmda x: x.split('')).map(lambda x:[x])
df = rdd.toDF(['word'])
df.createTempView('words')
spark.sql("""select word,count(*) as cnt from words group by word order by cnt desc""").show()
dsl风格处理
df = spark.read.format('text').load('./a.txt')
df2 = df.withColumn('value',F.explode(F.split(df['value'],'')))
df2.groupBy('value').count().withColumnRenamed('count','cnt').orderBy('cnt',ascending=False).show()

数据清洗API

python 复制代码
df.dropDuplicates().show()
去除重复值
df.dropDuplicates(['age','job']).show()
按照列名去除重复值
df.dropna().show()
如果有缺失值删除此行
df.dropna(thresh=3).show()
有效列最少三个才能保存此行
df.dropna(thresh=2,subset=['name','age']).shwo()
针对这两个列必须有效列为两个才能保留数据
df.fillna({'name':'位置姓名','age':'1','job':'worker'}).show()
对制定列用指定值进行缺失值填充

RDD运行流程:代码-- DAG调度器逻辑任务-- Task调度器任务分配和管理监控-- worker干活

相关推荐
天国梦14 分钟前
2026英语教学系统选型实战:AI如何让备课效率提升42%?天学网技术落地全解析
人工智能·学习
维克兜率天35 分钟前
【维克】大数定律与中心极限定理:为什么长期均值终将回归?
经验分享·学习·金融·概率论
中微极客1 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
吃好睡好便好3 小时前
MATLAB中图像的读取、写入和显示
开发语言·图像处理·学习·计算机视觉·matlab
~kiss~3 小时前
大模型中的强化学习算法和对齐算法的区别
学习
MartinYeung53 小时前
[论文学习]InjecAgent:工具集成大语言模型智能体的间接提示注入基准测试
网络·学习·语言模型
XS0301063 小时前
SpringMVC核心知识点实操笔记
笔记
sean9083 小时前
Vim 学习 - 快速删除/修改
学习·vim
依然范特东3 小时前
强化学习笔记1--基础概念
笔记
小黄人软件4 小时前
如何解决不想学、学不会、学不进去,吸收内化不了学的东西,怎么办?如何真正建立“知识内化系统“?不输出,不学习
学习