Spark Python API接口介绍
由于Spark开源版本升级,为避免出现API兼容性或可靠性问题,建议用户使用配套版本的API。
Spark Core常用接口
Spark主要使用到如下这几个类:
- pyspark.SparkContext:是Spark的对外接口。负责向调用该类的python应用提供Spark的各种功能,如连接Spark集群、创建RDD、广播变量等。
 - pyspark.SparkConf:Spark应用配置类。如设置应用名称,执行模式,executor内存等。
 - pyspark.RDD(Resilient Distributed Dataset):用于在Spark应用程序中定义RDD的类,该类提供数据集的操作方法,如map,filter。
 - pyspark.Broadcast:广播变量类。广播变量允许保留一个只读的变量,缓存在每一台机器上,而非每个任务保存一份复制。
 - pyspark.StorageLevel: 数据存储级别。有内存(MEMORY_ONLY),磁盘(DISK_ONLY),内存+磁盘(MEMORY_AND_DISK)等。
 - pyspark.sql.SQLContext:是SparkSQL功能的主入口。可用于创建DataFrame,注册DataFrame为一张表,表上执行SQL等。
 - pyspark.sql.DataFrame:分布式数据集。DataFrame等效于SparkSQL中的关系表,可被SQLContext中的方法创建。
 - pyspark.sql.DataFrameNaFunctions:DataFrame中处理数据缺失的函数。
 - pyspark.sql.DataFrameStatFunctions:DataFrame中统计功能的函数,可以计算列之间的方差,样本协方差等。
 
| 
         方法  | 
       
         说明  | 
      
|---|---|
| 
         map(f, preservesPartitioning=False)  | 
       
         对调用map的RDD数据集中的每个element都使用Func,生成新的RDD。  | 
      
| 
         filter(f)  | 
       
         对RDD中所有元素调用Func,生成将满足条件数据集以RDD形式返回。  | 
      
| 
         flatMap(f, preservesPartitioning=False)  | 
       
         先对RDD所有元素调用Func,然后将结果扁平化,生成新的RDD。  | 
      
| 
         sample(withReplacement, fraction, seed=None)  | 
       
         抽样,返回RDD一个子集。  | 
      
| 
         union(rdds)  | 
       
         返回一个新的RDD,包含源RDD和给定RDD的元素的集合。  | 
      
| 
         distinct([numPartitions: Int]): RDD[T]  | 
       
         去除重复元素,生成新的RDD。  | 
      
| 
         groupByKey(): RDD[(K, Iterable[V])]  | 
       
         返回(K,Iterable[V]),将key相同的value组成一个集合。  | 
      
| 
         reduceByKey(func, numPartitions=None)  | 
       
         对key相同的value调用Func。  | 
      
| 
         sortByKey(ascending=True, numPartitions=None, keyfunc=function <lambda>)  | 
       
         按照key来进行排序,是升序还是降序,ascending是boolean类型。  | 
      
| 
         join(other, numPartitions)  | 
       
         当有两个KV的dataset(K,V)和(K,W),返回的是(K,(V,W))的dataset,numPartitions为并发的任务数。  | 
      
| 
         cogroup(other, numPartitions)  | 
       
         将当有两个key-value对的dataset(K,V)和(K,W),返回的是(K, (Iterable[V], Iterable[W]))的dataset,numPartitions为并发的任务数。  | 
      
| 
         cartesian(other)  | 
       
         返回该RDD与其它RDD的笛卡尔积。  | 
      
| 
        API  | 
      
        说明  | 
     
|---|---|
| 
        reduce(f)  | 
      
        对RDD中的元素调用Func。  | 
     
| 
        collect()  | 
      
        返回包含RDD中所有元素的一个数组。  | 
     
| 
        count()  | 
      
        返回的是dataset中的element的个数。  | 
     
| 
        first()  | 
      
        返回的是dataset中的第一个元素。  | 
     
| 
        take(num)  | 
      
        返回前num个elements。  | 
     
| 
        takeSample(withReplacement, num, seed)  | 
      
        takeSample(withReplacement, num, seed)对dataset随机抽样,返回由num个元素组成的数组。withReplacement表示是否使用replacement。  | 
     
| 
        saveAsTextFile(path, compressionCodecClass)  | 
      
        把dataset写到一个text file、HDFS或者HDFS支持的文件系统中,spark把每条记录都转换为一行记录,然后写到file中。  | 
     
| 
        saveAsSequenceFile(path, compressionCodecClass=None)  | 
      
        只能用在key-value对上,然后生成SequenceFile写到本地或者hadoop文件系统。  | 
     
| 
        countByKey()  | 
      
        对每个key出现的次数做统计。  | 
     
| 
        foreach(func)  | 
      
        在数据集的每一个元素上,运行函数。  | 
     
| 
        countByValue()  | 
      
        对RDD中每个不同value出现的次数进行统计。  | 
     
Spark Streaming常用接口
Spark Streaming中常见的类有:
- pyspark.streaming.StreamingContext:是Spark Streaming功能的主入口,负责提供创建DStreams的方法,入参中需要设置批次的时间间隔。
 - pyspark.streaming.DStream:是一种代表RDDs连续序列的数据类型,代表连续数据流。
 - dsteam.PariDStreamFunctions:键值对的DStream,常见的操作如groupByKey和reduceByKey。
    
对应的Spark Streaming的JAVA API是JavaStreamingContext,JavaDStream和JavaPairDStream。
 
Spark Streaming的常见方法与Spark Core类似,下表罗列了Spark Streaming特有的一些方法。
| 
        方法  | 
      
        说明  | 
     
|---|---|
| 
        socketTextStream(hostname, port, storageLevel)  | 
      
        从TCP源主机:端口创建一个输入流。  | 
     
| 
        start()  | 
      
        启动Spark Streaming计算。  | 
     
| 
        awaitTermination(timeout)  | 
      
        当前进程等待终止,如Ctrl+C等。  | 
     
| 
        stop(stopSparkContext, stopGraceFully)  | 
      
        终止Spark Streaming计算,stopSparkContext用于判断是否需要终止相关的SparkContext,StopGracefully用于判断是否需要等待所有接收到的数据处理完成。  | 
     
| 
        UpdateStateByKey(func)  | 
      
        更新DStream的状态。使用此方法,需要定义State和状态更新函数。  | 
     
| 
        window(windowLength, slideInterval)  | 
      
        根据源DStream的窗口批次计算得到一个新的DStream。  | 
     
| 
        countByWindow(windowLength, slideInterval)  | 
      
        返回流中滑动窗口元素的个数。  | 
     
| 
        reduceByWindow(func, windowLength, slideInterval)  | 
      
        当调用在DStream的KV对上,返回一个新的DStream的KV对,其中每个Key的Value根据滑动窗口中批次的reduce函数聚合得到。  | 
     
| 
        join(other,numPartitions)  | 
      
        实现不同的Spark Streaming之间做合并操作。  | 
     
SparkSQL常用接口
Spark SQL中在Python中重要的类有:
- pyspark.sql.SQLContext:是Spark SQL功能和DataFrame的主入口。
 - pyspark.sql.DataFrame:是一个以命名列方式组织的分布式数据集。
 - pyspark.sql.HiveContext:获取存储在Hive中数据的主入口。
 - pyspark.sql.DataFrameStatFunctions:统计功能中一些函数。
 - pyspark.sql.functions:DataFrame中内嵌的函数。
 - pyspark.sql.Window:sql中提供窗口功能。
 
| 
        方法  | 
      
        说明  | 
     
|---|---|
| 
        collect()  | 
      
        返回一个数组,包含DataFrame的所有列。  | 
     
| 
        count()  | 
      
        返回DataFrame中的行数。  | 
     
| 
        describe()  | 
      
        计算统计信息,包含计数,平均值,标准差,最小值和最大值。  | 
     
| 
        first()  | 
      
        返回第一行。  | 
     
| 
        head(n)  | 
      
        返回前n行。  | 
     
| 
        show()  | 
      
        用表格形式显示DataFrame。  | 
     
| 
        take(num)  | 
      
        返回DataFrame中的前num行。  | 
     
| 
        方法  | 
      
        说明  | 
     
|---|---|
| 
        explain()  | 
      
        打印出SQL语句的逻辑计划和物理计划。  | 
     
| 
        printSchema()  | 
      
        打印schema信息到控制台。  | 
     
| 
        registerTempTable(name)  | 
      
        将DataFrame注册为一张临时表,命名为name,其周期和SQLContext绑定在一起。  | 
     
| 
        toDF()  | 
      
        返回一个列重命名的DataFrame。  |