PySpark大数据处理详细教程

在这里插入图片描述
欢迎各位数据爱好者!今天,我很高兴与您分享我的最新博客,专注于探索 PySpark DataFrame 的强大功能。无论您是刚入门的数据分析师,还是寻求深入了解大数据技术的专业人士,这里都有丰富的知识和实用的技巧等着您。让我们一起潜入 PySpark 的世界,解锁数据处理和分析的无限可能!

基础操作

基础操作涵盖了数据的创建、加载、查看、选择、过滤、转换、聚合、排序、合并和导出等基本操作。

1.数据创建和加载

# 读取 CSV 文件
df = spark.read.csv("path/to/file.csv", header=True, inferSchema=True)

# 读取 HIVE 表
hive_sql = f"select * from {DATABASE}.{TABLE_NAME} {CONDITION}"
df = spark.sql(hive_sql)

# 读取 Parquet 文件
parquet_file = "path/to/parquet/file"
df = spark.read.parquet(parquet_file)

2.数据查看和检查

df.show(2,truncate=False)
df.printSchema()

3.查看分位数

quantiles = df.approxQuantile("salary", [0.25, 0.5, 0.75], 0)
# col:要计算分位数的列名,为字符串类型。
# probabilities:一个介于 0 和 1 之间的数字列表,表示要计算的分位数。例如,0.5 表示中位数。
# relativeError:相对误差。这是一个非负浮点数,用于控制计算精度。
# 值为 0 表示计算精确的分位数(可能非常耗时)。
# 随着该值的增加,计算速度会提高,但精度会降低。例如,如果 relativeError 为 0.01,则计算结果与真实分位数的差距在真实分位数的 1% 范围内。

4.数据选择和过滤

df.select("column1").show()
df.filter(df["column1"] > 100).show()

# 或者
df.filter(F.col("column1") > 100).show()
5.数据转换和操作
df.withColumn("new_column", F.col("column1").cast("int"))).show()

df.withColumn("new_column", df["column1"] + F.lit(100)).show()
df.withColumn("new_column", F.col("column1") + F.lit(100)).show()

df.drop("column1").show()

6.数据聚合和分组

df.groupBy("column1").count().show()

df.groupBy("column1")agg.(F.count(F.col("id"))).show()

7.排序和排名取TopN

df.orderBy(df["column1"].desc()).show()
df.orderBy(F.col("column1").desc()).show()

8.数据合并和连接

df1.join(df2, df1["column"] == df2["column"]).show()

# 或者
from functools import reduce
from pyspark.sql import DataFrame
dataframes = [df1,df2,df3]
union_df = reduce(DataFrame.union, dataframes)

9.缺失值和异常值处理

df.na.fill({"column1": 0}).show()

10.数据转换和类型转换

df.withColumn("column_casted", df["column1"].cast("int")).show()

11.数据导出和写入

# 存储 DataFrame 为CSV
df.write.csv("path/to/output.csv")
# 存储 DataFrame 为HIVE
df.write.format("orc").mode("overwrite").saveAsTable(f"test.sample")
# 存储 DataFrame 为 Parquet 文件
output_path = "path/to/output/directory"
df.write.parquet(output_path)

高级操作

高级操作包括更复杂的数据处理技术、特征工程、文本处理和高级 SQL 查询。

1.数据分区和优化

df.repartition(10).write.parquet("path/to/output")

2.数据探索和分析

df.describe().show()
# 或者
df.summary().show())

3.复杂数据类型处理

from pyspark.sql.functions import explode
df.withColumn("exploded_col", explode(df["array_col"])).show()

4.特征工程

from pyspark.ml.feature import StringIndexer
indexer = StringIndexer(inputCol="category", outputCol="category_index")
df_indexed = indexer.fit(df).transform(df)

5.文本数据处理

from pyspark.ml.feature import Tokenizer
tokenizer = Tokenizer(inputCol="text", outputCol="words")
df_words = tokenizer.transform(df)

6.高级 SQL 查询

df.createOrReplaceTempView("table")
spark.sql("SELECT * FROM table WHERE column1 > 100").show()

进阶操作

进阶操作涵盖了性能调优、与其他数据源的集成和数据流处理,这些通常需要更深入的理解和经验。

1.性能调优和监控

df.explain()

2.与其他数据源集成

df_jdbc = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:mysql://your-db-url") \
    .option("dbtable", "tablename") \
    .option("user", "username") \
    .option("password", "password") \
    .load()

3.数据流处理

df_stream = spark.readStream \
    .schema(df_schema) \
    .option("maxFilesPerTrigger", 1) \
    .json("/path/to/directory/")

4.使用 Structured Streaming

stream_query = df_stream.writeStream \
    .outputMode("append") \
    .format("console") \
    .start()
stream_query.awaitTermination()

这些示例提供了对 PySpark 操作的广泛了解,从基础到进阶,涵盖了数据处理和分析的多个方面。对于更复杂的场景和高级功能,强烈建议查阅 PySpark 的官方文档和相关教程。


将在后续过程中,进一步完善~~~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/240931.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Centos7 配置Git

随笔记录 目录 1, 新建用户 2. 给用户设置密码相关操作 3. 为新用户添加sudo 权限 4. 配置Git 4.1 配置Git 4.2 查看id_ras.pub 5, 登录Git 配置SSH 秘钥 6. Centos7 登录Git 7. clone 指定branch到本地 8. 将新代码复制到指定路径 9. 上传指定代码 …

2023年11月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2023年11月国产数据库大事件和重要产品发布消息。 11月国产数据库大事记 TOP10 11月国产数据库大事记(时间线) 11月1日消息,近日,由金仓数据库支撑的某大型运营商B域一级BOSS枢纽系统顺利升级上线。金仓数…

四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛

四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛 文章目录 四川技能大赛——2023年四川网信人才技能大赛(网络安全管理员赛项)决赛C1-比64少的bas - DONEC2-affine - DONEC3-简单的RSA - DONEM1-不要动我的f…

关于String.Format混合$符号格式化引发的问题

之前一个老项目是用string.Format()进行格式化的,.net 4.5之后的版本 引入 $"字符串" 格式化标识符, 如下代码: string barcode "1234567{#0.000}ABCDE";barcode "12345START{0:#000}ABCDE";try{string sFo…

【网络安全技术】电子邮件安全PGP,SMIME

一、PGP(Pretty Good Privacy) PGP是一种邮件加密手段,他在发邮件一方加密,然后发给发送方邮件服务器,发送方邮件服务器再发送给接收方邮件服务器,然后接收方再从接收方邮件服务器pop出来,这整…

vue实现自动打字效果(带光标效果)

代码介绍(其实就是通过字符串截取加定时拼接完成的,我相信有时间都能琢磨出来,来这里就是为了省事) 上vue页面代码: <template><div idApp><h2>{{text}}<span ref"fou" class"fousdis">{{_}}</span></h2></div>…

CentOS 7 部署frp穿透内网

本文将介绍如何在CentOS 7.9上部署frp&#xff0c;并通过示例展示如何配置和测试内网穿透。 文章目录 &#xff08;1&#xff09;引言&#xff08;2&#xff09;准备工作&#xff08;4&#xff09;frps服务器端配置&#xff08;5&#xff09;frpc客户端配置&#xff08;6&#…

工信部举行发布会 数字化产业推动元宇宙发展取得良好成效

据官方消息&#xff0c;工业和信息化部12日举行“发挥国家高新区作用 加快推进新型工业化”新闻发布会。 在数字化建设方面取得了良好的成绩&#xff1a; 一是数字经济加速发展。国家高新区着力推动人工智能、大数据、云计算、区块链和元宇宙等新产业新业态蓬勃发展&#xff…

1688订单详情接口使用指南:含代码实现获取订单信息

一、引言 随着电子商务的飞速发展&#xff0c;越来越多的企业开始通过1688平台进行采购和销售。为了更好地管理订单&#xff0c;提高客户满意度&#xff0c;许多企业选择使用1688订单详情接口来获取订单信息。本文将详细介绍如何使用1688订单详情接口&#xff0c;并提供示例代…

2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题

2023 年山东省职业院校技能大赛&#xff08;高等职业教育&#xff09; “信息安全管理与评估”样题 目录 任务 1 网络平台搭建&#xff08;50 分&#xff09; 任务 2 网络安全设备配置与防护&#xff08;250 分&#xff09; 模块二 网络安全事件响应、数字取证调查、应用程序安…

Guava的注解处理机制

第1章&#xff1a;引言 Guava不仅仅是一个工具库&#xff0c;它更像是Java程序员的瑞士军刀&#xff0c;提供了一系列强大的功能&#xff0c;从集合操作到函数式编程&#xff0c;再到今天咱们要深入探讨的——注解处理机制。 注解&#xff08;Annotations&#xff09;&#x…

14:00面试,14:08就出来了,问的问题有点变态。。。。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

uniapp+vite+ts+express踩坑总结

1 关于引入express包报 import express from "express"; ^^^^^^ SyntaxError: Cannot use import statement outside a module的问题。 解决方案&#xff1a; 在package.json中添加type&#xff1a;“module”选项 2 Response is a type and must be imported …

Visio中如何在字母上打出上波浪线

1. 如何打出这样的带有波浪线的文字 我们在使用visio中&#xff0c;有时候遇见了特殊符号&#xff0c;比如下方这个带有波浪线的X&#xff0c;如何在visio打出这样的带有波浪线的文字&#xff1f; 2. 操作 首先输入你想打上上波浪线的字母&#xff0c;如下图所示 光标一定…

jmeter里如何添加Referer

按照此实例添加即可。 例如&#xff1a;接口

Flutter实现Android拖动到垃圾桶删除效果-Draggable和DragTarget的详细讲解

文章目录 Draggable介绍构造函数参数说明使用示例 DragTarget 介绍构造函数参数说明使用示例 DragTarget 如何接收Draggable传递过来的数据&#xff1f; Draggable介绍 Draggable是Flutter框架中的一个小部件&#xff0c;用于支持用户通过手势拖动一个子部件。它是基于手势的一…

常州经开区大学生音乐节——常州首届校园乐队比赛

2023年12月9日下午&#xff0c;由江苏省文化馆指导、常州经开区社会事业局主办、常州柒号文化传播有限公司承办、百吉琴行协办的青春制“燥”大学生音乐节——常州首届校园乐队比赛&#xff0c;在常州经开区文化活动中心顺利举办。 常州经开区社会事业局副局长 方姣 为本次比赛…

光栅化渲染:顶点属性插值及透视校正

要使基础的光栅化器正常工作&#xff0c;我们需要做的就是知道如何将三角形投影到屏幕上&#xff0c;将投影坐标转换为光栅空间&#xff0c;然后光栅化三角形&#xff0c;并可能使用深度缓冲区来解决可见性问题。 这已经足以创建 3D 场景的图像&#xff0c;这些图像既是透视正确…

非标设计之中间继电器

目录 一、简介&#xff1a;二、结构和原理&#xff1a;三、中间继电器分类四、中间继电器作用&#xff1a;五、线路图&#xff1a; 一、简介&#xff1a; 在很多的家用电器上(如自动洗衣机、电炉加温等等)&#xff0c;为了防止电流过大而损伤电器&#xff0c;因此在电器上面安装…

大学生创新创业平台竞赛管理子系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本大学生创新创业平台竞赛管理子系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完…