PySpark 学习笔记一

这篇博客介绍了PySpark中的Resilient Distributed Datasets(RDD),包括如何创建RDD、RDD的无模式特性以及常用的操作如map、filter、join等。通过实例展示了从文件读取数据、使用lambda表达式进行转换和行动,最后提到了RDD的持久化方法如saveAsTextFile。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了更好地进行大数据分析与处理,最近在学习PySpark,整理了一下笔记 ,加深印象。

1 Resilient Distributed Datasets(RDD)

弹性分布式数据集(RDD)是一个不可变的JVM对象的分布式集合,是Spark的基本抽象。

1.1 创建RDD
准备工作:

>>> import pyspark
>>> from pyspark import SparkContext
>>> from pyspark import SparkConf
>>> conf = SparkConf().setAppName('project1').setMaster('local')
>>> sc = SparkContext.getOrCreate(conf)

在PySpark里有两种方法创建RDD:
一是,.parallelize(…) 个collection集合 ( list or an array of some elements)。

>>> data = sc.parallelize([('amber',22),('alfred',23),('skye',4),('albert',12),('amber',9)])

二是,引用位于本地或HDFS上的某个文件(或多个文件)。

>>> data_from_file = sc.textFile('/home/qml/pyspark-ex/VS14MORT.txt.gz',4)
# sc.textFile(...,n)中的最后一个参数指定数据集被分区的数量,经验是分成两个四分区

Spark 支持多种数据格式:可以使用JDBC驱动程序读取文本,Parquet,JSON,Hive表和来自关系数据库的数据。请注意,Spark可以自动处理压缩的数据集(如Gzip压缩数据集)。
从文件读取的数据表示为MapPartitionsRDD,而不是像当我们.paralellize(…)一个集合的数据一样表示为ParallelCollectionRDD。

1.2 Schema

RDD是无模式的数据结构(不像DataFrames)。因此,在使用RDD时,并行化数据集对于Spark来说是完美的。

>>> data_heterogenous = sc.parallelize([('Ferrari','fast'),{
  'Porsche':100000},['Spain','visited',4504]]).collect()

所以,我们可以混合几乎任何东西:一个元组,一个字典,或一个列表。
一旦你.collect()数据集(即,运行一个动作将其返回给驱动程序),你可以像在Python中通常那样访问对象中的数据:

>>> data_heterogenous[1]['Porsche']
100000

.collect()方法将RDD的所有元素返回到驱动程序,并将其作为列表序列化。

1.3 读取文件

从文本文件读取时,文件中的每一行形成RDD的一个元素。 可以创建一个元素列表,每行代表一个值列表。

>>> data_from_file.take(1)

[u'                   1                                          2101  M1087 432311  4M4                2014U7CN                                    I64 238 070   24 0111I64                                                                                                                                                                           01 I64                                                                                                  01  11                                 100 601']

1.4 Lambda表达式
1.4.1 Transformations

  • .map(…)

该方法应用于RDD的每个元素。


                
### PySpark 学习笔记与教程 以下是关于 PySpark 的学习资源以及些重要的知识点总结: #### 1. 官方文档的重要性 PySpark 是 Apache Spark 提供的个 Python API,用于大规模数据处理。官方文档是最权威的学习材料之[^1]。通过阅读官方文档可以了解各个模块的功能、API 使用方法及其底层实现原理。 #### 2. 初学者入门指南 对于初学者来说,可以通过以下网站获取详细的案例教程: - **Spark By Examples**: 这是个专注于 PySpark 和其他 Spark 组件的教程站点,提供了丰富的代码示例和实际应用案例[^2]。 - **优快云 博客**: 许多开发者分享了自己的学习经验和技术文章,比如 Linux 下如何安装 PySpark 并配置 Jupyter Notebook 支持 Toree Kernel[^3]。 #### 3. 数据转换操作详解 在 PySpark 中,`RDD` (Resilient Distributed Dataset) 是核心概念之。下面是些常见的 RDD 转换操作: - `map`: 对每个元素执行指定的操作并返回新的 RDD[^4]。 ```python rdd = sc.parallelize([1, 2, 3]) squared_rdd = rdd.map(lambda x: x * x) result = squared_rdd.collect() print(result) # 输出 [1, 4, 9] ``` - `subtract`: 返回两个 RDD 差集的结果,即保留第个 RDD 中存在而不在第二个 RDD 中的元素[^5]。 ```python rdd1 = sc.parallelize([1, 2, 3, 4]) rdd2 = sc.parallelize([3, 4, 5, 6]) diff_rdd = rdd1.subtract(rdd2) result = diff_rdd.collect() print(result) # 输出 [1, 2] ``` #### 4. 高级主题探索 随着对基础功能的理解加深,还可以进步研究更复杂的场景,例如: - 结合机器学习库 MLlib 实现分布式模型训练。 - 将 PySpark 应用到自然语言处理领域,配合 TensorFlow 或 PyTorch 构建端到端解决方案。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值