本系列文章是下载的是spark2.2.1版本的源码进行相关分析和学习。
理解dbData=sc.read.schema(mySchema).format("com.xxxx.spark.sql").options(uri=dbUrl, database= myDatabase, collection=myCollection).load()
1.SparkSession类的概括(今天我们主要讲解read,所以SparkSession就略过哈):官方备注为"The entry point to programming Spark with the Dataset and DataFrame API"
即:使用数据集和DataFrame API编写Spark程序的入口点
使用示例:
>>> spark = SparkSession.builder \\
... .master("local") \\
... .appName("Word Count") \\
... .config("spark.some.config.option", "some-value") \\
... .getOrCreate()
.. autoattribute:: builder
:annotation:
"""
2.而今天我们来理解一下sparkSession的read方法
官网给出如下内容:
read
Returns a DataFrameReader that can be used to read data in as a DataFrame.
Returns: DataFrameReader
大概意思就是read方法返回的是一个DataFrameReader ,它可以用来读入数据并得到一个DataFrame.
源码如下:
def read(self):
"""
Returns a :class:`DataFrameReader` that can be used to read data
in as a :class:`DataFrame`.
返回`DataFrameReader`类:可以用来读取数据且格式为DataFrame
:return: :class:`DataFrameReader`
"""
return DataFrameReader(self._wrapped)
从上面的源码中我们可以看出,SparkSession的read()方法实质上是调用的DataFrameReader()方法。
那下面我们就找到这个方法一探究竟
从导入语句from pyspark.sql.readwriter import DataFrameReader可以知道DataFrameReader的所在位置
DataFrameReader这个类包含了很多种方法,这里我们只分析我们用到的就可以了:
schema指定输入模式
format指定输入数据源格式。
options为基础数据源添加输入选项
源码如下:
class DataFrameReader(OptionUtils):
"""
Interface used to load a :class:`DataFrame` from external storage systems
(e.g. file systems, key-value stores, etc). Use :func:`spark.read`
to access this.
该接口用于从外部存储系统(例如文件系统、键值存储等等)加载一个`DataFrame`类。使用:函数:“spark.read” 来访问。