Python学习之PySpark案例实战

"""
演示获取PySpark的执行环境入库对象: SparkContext
并通过SparkContext对象获取当前PySpark的版本
"""

# 导包

from pyspark import SparkConf,SparkContext
# 创建SparkConf类对象中
conf = SparkConf().setSparkHome("local[*]").setAppName("test_spqrk_app")
#基FSparkConf类对象创LSparkContext对象
sc = SparkContext(conf = conf)
#打印PySpark的运行版本
print(sc.version)
#停止SparkContext对象的运行(停止PySpark程序)
sc.stop()
PySpark的编程模型

SparkContext类对象,是PySpark编程中一切功能的入口。PySpark的编程,主要分为如下三大步骤

通过SparkContext对象,完成数据输入

输入数据后得到RDD对象,对RDD对象进行选代计算

最终通过RDD对象的成员方法,完成数据输出工作

数据输入

只要数据输入到spark就一定是rdd

RDD对象

如图可见,PySpark支持多种数据的输入,在输入完成后,都会得到一个:RDD类的对象

RDD全称为:弹性分布式数据集(Resilient Distributed Datasets)PySpark针对数据的处理,都是以RDD对象作为载体,即:

数据存储在RDD内

各类数据的计算方法,也都是RDD的成员方法

RDD的数据计算方法,返回值依旧是RDD对象

Python数据容器转RDD对象

PySpark支持通过SparkContext对象parallelize成员方法

List

Tuple

Set

Dic

tstr

转换为PySpark的RDD对象

注意:

字符串会被拆分出1个个的字符,存入RDD对象

字典仅有key会被存入RDD对象

"""
演示通过PySpark代码加载数据,即数据输入
"""
from pyspark import SparkContext,SparkConf

#构建接口对象
conf = SparkConf().setSparkHome("local[*]").setAppName("test_rdd")
sc = SparkContext(conf=conf) #构建接口对象
#构建实验数据
list_1 = [1,2,3,4,5]
turple_1 = (1,2,3,4)
str_1 = ("asdoac")
dict_1 = {"key1":"value1","key2":"value2"}
set_1 = {1,2,3,4,5}
#通过parallelize方法将Python对象加载到Spark内,成为RDD对象
rdd1 = sc.parallelize(list_1)  #列表转spark的rdd
rdd2 = sc.parallelize(turple_1)  #元组转spark的rdd
rdd3 = sc.parallelize(str_1)  #字符串转spark的rdd
rdd4 = sc.parallelize(dict_1)  #字典转spark的rdd
rdd5 = sc.parallelize(set_1)  #集合转spark的rdd

print(rdd1.collect())
print(rdd2.collect())
print(rdd3.collect())
print(rdd4.collect())
print(rdd5.collect())

sc.stop()
读取文件转RDD对象

PySpark也支持通过SparkContext入口对象来读取文件来构建出RDD对象

"""
演示通过PySpark代码加载数据,即数据输入
"""
from pyspark import SparkContext,SparkConf

#构建接口对象
conf = SparkConf().setSparkHome("local[*]").setAppName("test_rdd")
sc = SparkContext(conf=conf) #构建接口对象

#用过textFile方法,读取文件数据加载到Spark内,成为RDD对象
rdd = sc.textFile("D:/bill.txt")
print(rdd.collect())

sc.stop()
总结:
### PySpark 实战案例与项目经验 以下是关于 PySpark 数据处理和分析的一些具体实战案例及其对应的代码实现: #### 1. 手机号码流量统计 此案例展示如何使用 PySpark 对手机号码的流量数据进行统计,计算每个用户的总流量。 ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("PhoneTrafficStats").getOrCreate() data = [ ("user1", "2023-01-01", 10), ("user2", "2023-01-01", 20), ("user1", "2023-01-02", 15), ] columns = ["user_id", "date", "traffic"] df = spark.createDataFrame(data, columns) result_df = df.groupBy("user_id").sum("traffic") result_df.show() ``` 上述代码实现了按用户 ID 聚合并计算其总流量的功能[^1]。 --- #### 2. 合同数据分析 该案例涉及对合同文件中的金额字段进行筛选、聚合和排序操作,从而找出最大金额的合同记录。 ```python contract_data = [ (1, "ContractA", 5000), (2, "ContractB", 7000), (3, "ContractC", 6000), ] schema = ["id", "name", "amount"] contracts_df = spark.createDataFrame(contract_data, schema) filtered_contracts = contracts_df.filter(contracts_df.amount > 6000).orderBy("amount", ascending=False) filtered_contracts.show() ``` 这段代码展示了如何基于条件过滤数据,并按照指定列进行降序排列。 --- #### 3. 日志分析 在此案例中,PySpark 可用于解析 Web 服务器的日志文件,提取访问 IP 地址并统计各 IP 的请求次数。 ```python log_data = [ ("192.168.1.1", "/index.html"), ("192.168.1.2", "/about.html"), ("192.168.1.1", "/contact.html"), ] logs_schema = ["ip_address", "url_path"] logs_df = spark.createDataFrame(log_data, logs_schema) ip_counts = logs_df.groupBy("ip_address").count().sort("count", ascending=False) ip_counts.show() ``` 这里通过 `groupBy` 和 `count` 方法完成了对日志数据的简单分析。 --- #### 大规模机器学习的数据准备 除了基本的数据处理功能之外,PySpark 还可以应用于大规模机器学习项目的前期准备工作。例如加载 CSV 文件作为 DataFrame 并执行必要的清理工作。 ```python csv_file = "path/to/large_dataset.csv" dataset = spark.read.format("csv").option("header", "true").load(csv_file) cleaned_data = dataset.dropna() # 删除缺失值行 feature_columns = cleaned_data.columns[:-1] label_column = cleaned_data.columns[-1] final_data = cleaned_data.select(feature_columns + [label_column]) final_data.show(5) ``` 这是典型的从原始数据到可用于训练模型的过程之一[^3]。 --- #### 总结 以上几个例子分别代表了不同类型的大数据应用场景——无论是简单的统计数据还是复杂的特征工程任务,都可以借助 PySpark 来完成高效的分布式运算[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值