查看pyspark的源码自己的一些见解

pyspark是Spark的PythonAPI

几个重要的类

Spark的RDD编程

  • SparkConf

用来配置Spark,SparkConf直接设置的任何参数优先于系统属性。
常用的方法:

  • setMaster:设置要连接的主url
  • setAppName:设置应用的名称
  • set:设置配置属性(以字典的形式)。将其他的set**方法写进一个字典
  • SparkContext

SparkContext是Spark功能的入口
SparkContext()的初始化方法可以以参数来配置Spark,但是他首先会查找conf参数;conf参数对应的是SparkConf()类中的配置,然后调用方法确检测,确保SparkContext只在驱动程序上创建;最后得到一个SparkContext对象(sc)
 
通过parallelize()或者textFile()方法返回一个RDD对象
parallelize:自己传入数据,然后返回一个RDD对象
textFile:读取文件(HDFS,本地系统等)编码必须是UTF-8的,返回一个RDD对象

  • RDD

Resilient distributed data sets 弹性分布式数据集
RDD类中有很多转换方法,每个方法得到的内容不可修改;
而且只有用到行动操作,RDD才开始执行之前一系列的转换(惰性求值)
RDD是Spark Core的数据抽象,由SparkContext得到

SparkSQL

DataFrame是SparkSQL的数据抽象

  • SparkSession

SparkSession是DataFrame和SQL功能的主要入口
SparkSession初始化方法中传入SparkContext的对象,用于配置Spark参数得到SparkSession对象

最后的调用不懂!

 def __init__(self, sparkContext, jsparkSession=None):
        from pyspark.sql.context import SQLContext
        self._sc = sparkContext
        self._jsc = self._sc._jsc
        self._jvm = self._sc._jvm
        if jsparkSession is None:
            if self._jvm.SparkSession.getDefaultSession().isDefined() \
                    and not self._jvm.SparkSession.getDefaultSession().get() \
                        .sparkContext().isStopped():
                jsparkSession = self._jvm.SparkSession.getDefaultSession().get()
            else:
                jsparkSession = self._jvm.SparkSession(self._jsc.sc())
        self._jsparkSession = jsparkSession
        self._jwrapped = self._jsparkSession.sqlContext()
        self._wrapped = SQLContext(self._sc, self, self._jwrapped)
        _monkey_patch_RDD(self)
        install_exception_handler()		# 把该对象.toDF就能得到DataFrame格式

这里的调用

_monkey_patch_RDD(self)


def _monkey_patch_RDD(sparkSession):
    def toDF(self, schema=None, sampleRatio=None):
        return sparkSession.createDataFrame(self, schema, sampleRatio)

    RDD.toDF = toDF

或者使用SparkSession.builder.config(conf=conf).getOrCreate()
conf是Spark的配置选项
两种方式都是为了得到SparkSession对象

得到了SparkSession对象后
可以用SparkSession对象调用.createDataFrame(RDD对象)得到DataFrame数据类型
或者RDD对象调用.toDF()方法,得到DataFrame数据类型(toDF方法内部也是用createDataFrame(RDD对象)实现的)

在创建DF的时候要指定表头,表头可以在设置RDD转换操作的时候用Row来指定
或者在创建DF的时候指定表头列表

# method1
rdd = employeeText.map(lambda x:x.split(",")).map(lambda x:Row(id=int(x[0]),name=x[1],age=int(x[2])))
schemaPeople = spark.createDataFrame(rdd)

# method2
rdd = employeeText.map(lambda x:x.split(","))
schemaPeople = spark.createDataFrame(rdd,["id","name","age"])

schemaPeople2 = rdd.toDF(["id","name","age"])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值