Spark在前面已经和大家说过很多了,Python这几天也整理出了很多自己的见解,今天就和大家说下一个新的东西,PySpark,一看名字就知道和前面二者都有很大关系,那么PySpark到底是什么,和之前所说的Spark与Python有什么不一样的呢?今天就和大家简单的聊聊。
回忆下Spark的简介:
Spark是一种通用的大数据计算框架,是基于RDD(弹性分布式数据集)的一种计算模型。那到底是什么呢?可能很多人还不是太理解,通俗讲就是可以分布式处理大量集数据的,将大量集数据先拆分,分别进行计算,然后再将计算后的结果进行合并。
PySpark简介
Spark是用 Scala编程语言 编写的。为了用Spark支持Python,Apache Spark社区发布了一个工具PySpark。使用PySpark,也可以使用Python编程语言中的 RDD 。正是由于一个名为 Py4j的库,他们才能实现这一目标。
简单来说
在python driver端,SparkContext利用Py4J启动一个JVM并产生一个JavaSparkContext。Py4J只使用在driver端,用于本地python与Java SparkContext objects的通信。大量数据的传输使用的是另一个机制。
RDD在python下的转换会被映射成java环境下PythonRDD。在远端worker机器上,PythonRDD对象启动一些子进程并通过pipes与这些子进程通信,以此send用户代码和数据。
PySpark 是 Spark 为 Python 开发者提供的 API,其依赖于 Py4J。
PySpark 使用的类
pyspark.SparkContext
pyspark.SparkContext 类提供了应用与 Spark 交互的主入口点,表示应用与 Spark 集群的连接,基于这个连接,应用可以在该集群上创建 RDD 和 广播变量 (pyspark.Broadcast)
pyspark.RDD
这个类是为 PySpark 操作 RDD提供了基础方法。
first() 是 pyspark.RDD 类提供的方法,返回 RDD 的第一个元素。
aggregate() 方法使用给定的组合函数和中性“零值,先聚合每个分区的元素,然后再聚合所有分区的结果。
cache() 使用默认存储级别(MEMORY_ONLY)对此 RDD 进行持久化。
collect() 返回一个列表,包含此 RDD 中所有元素。
pyspark.Accumulator
一种“只允许添加”的共享变量,Spark 任务只能向其添加值。
pyspark.Broadcast
Spark 提供了两种共享变量:广播变量 和 累加器,pyspark.Broadcast 类提供了对广播变量的操作方法。
pyspark.Accumulator
pyspark.Accumulator 提供了对累加器变量的操作方法。
累加器是仅仅被相关操作累加的变量,因此可以在并行中被有效地支持。