pySpark学习笔记
编译python,有些依赖需要下载下
sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
cd 解压后的python包,注意下载3版本的
mkdir python3
./configure --prefix=/home/hadoop/app/python3
make && make install
Spark编译上波SparkSQL我已经讲过怎么编译了,其他还好,主要是换成阿里的镜像,不然慢到怀疑人生
1.RDD是一个抽象类
2.带泛型的,可以支持多种类型:String,Person,User
A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable,partitioned collection of elements that can be operated on in parallel.
RDD是一个弹性的分布式的数据集,是spark的基本抽象,RDD是不可变的,并且它由多个partition构成(可能分布在多台机器上,可以存memory上,也可以存disk里等等),可以进行并行操作
弹性:分布式计算时可容错
不可变:一旦产生就不能被改变
单机存储/计算 ==>分布式存储/计算
1)数据的存储:切割。 HDFS的Block
2)数据的计算:切割(分布式并行计算) MapReduce/Spark
3)存储+计算 : HDFS/S3+MapReduce/Spark
RDD的特性
Internally, each RDD is characterized by five main properties:
- A list of partitions —— RDD由很多partition构成,在spark中,计算式,有多少partition就对应有多少个task来执行
- A function for computing each split ——对RDD做计算,相当于对RDD的每个split或partition做计算
- A list of dependencies on other RDDs ——RDD之间有依赖关系,可溯源
-Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区,比如可以按key的hash值分区
- Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file) ——
最优的位置去计算,也就是数据的本地性
计算每个split时,在split所在机器的本地上运行task是最好的,避免了数据的移动;split有多个副本,所以preferred location不止一个
数据在哪里,应优先把作业调度到数据所在机器上,减少数据的IO和网络传输,这样才能更好地减少作业运行时间(木桶原理:作业运行时间取决于运行最慢的task所需的时间),提高性能
note:
pyspark启动是默认的python2.75
配置一下环境变量
export PATH=/home/hadoop/app/python3/bin:$PATH
export PYSPARK_PYTHON=python3.6
source 一下
pyspark主要了解下rdd