pyspark.sql module
Module Context --spark SQL 、dataFrames的重要类
pyspark.sql.SQLContext --DataFrame 和 SQL 功能的主要进入点
pyspark.sql.DataFrame --以列命令的分布式数据集合
pyspark.sql.Column --DataFrame中以列表示的数据,也就是一列数据
pyspark.sql.Row --DataFrame中以行表示的数据,也就是一行数据
pyspark.sql.HiveContext --对Apache Hive中存储数据进行访问的主要进入点
pyspark.sql.GroupedData--DataFrame.groupBy() 返回的聚合方法
pyspark.sql.DataFrameNaFunctions --处理丢失数据的方法(null values).
pyspark.sql.DataFrameStatFunctions --统计功能的方法
pyspark.sql.functions --DataFrame可用的内置函数列表
pyspark.sql.types --可用的数据类型列表。
pyspark.sql.Window --处理窗口功能
class pyspark.sql.SparkSession(sparkContext, jsparkSession=None)
spark程序 Dataset 和DataFrame API 的入口
一个用于创建DataFrame,以表的形式记录DataFrame,在表上执行SQL,存储表读取文件的sparkSession。用下面的方式创建sparkSession:
>>> spark = SparkSession.builder \ ... .master("local") \ ... .appName("Word Count") \ ... .config("spark.some.config.option", "some-value") \ ... .getOrCreate()
class Builder
SparkSession的创建
appName(name)
为应用程序设置一个名字,这个名字将显示在spark的web UI上。
如果不设置名字,将随机产生一个名字
Parameters: name – 应用程序名
New in version 2.0.
config(key=None, value=None, conf=None)
设置配置选项,使用此方式设置的配置将自动应用到SparkConf和SparkSession的配置中
对现存的SparkConf,配置conf参数
>>> from pyspark.conf import SparkConf >>> SparkSession.builder.config(conf=SparkConf()) <pyspark.sql.session...
对于(key, value)键值对,可以省略参数名
>>> SparkSession.builder.config("spark.some.config.option", "some-value") <pyspark.sql.session...
Parameters:
key – 配置属性的键名称(string)
value – 配置属性的值
conf – SparkConf的一个实例
New in version 2.0.
enableHiveSupport()
提供hive支持,包括连通一个持久化的hive元存储,支持hive并行转换,hive用户自定义函数。
New in version 2.0.
getOrCreate()
得到一个现存在的SparkSession,如果没有现存的SparkSession,创建一个基于选项的新的SparkSession
这个方法首先会检查是否存在一个管局有效的默认SparkSession,如果有那么返回这个SparkSession,如果没有创建一个SparkSession,重新分配为全局有效的默认SparkSession。
SparkSession as the global default. >>> s1 = SparkSession.builder.config("k1", "v1").getOrCreate() >>> s1.conf.get("k1") == s1.sparkContext.getConf().get("k1") == "v1" True
如果返回一个现存的SparkSession,配置的选项将应用到这个现存的SparkSession
>>> s2 = SparkSession.builder.config("k2", "v2").getOrCreate() >>> s1.conf.get("k1") == s2.conf.get("k1") True >>> s1.conf.get("k2") == s2.conf.get("k2") True
New in version 2.0.
master(master)
设置spark master的连接URL,例如“local”运行在本地,“local[4]”运行在本地使用4个核,“spark://master:7077”运行在spark standalone模式的集群上。
Parameters: master – spark master的URL
New in version 2.0.
SparkSession.builder = <pyspark.sql.session.Builder object at 0x7f8396ea2cd0>
SparkSession.catalog
一个接口用户可能用来创建,删除,更改,查询数据库,表,函数等等。
New in version 2.0.
SparkSession.conf
spark运行时的配置接口
一个接口用户可以用来得到或者设置与Spark SQL相关的spark和hadoop配置。当得到配置的value,默认给基本的sparkContext设置此值,如果有的话。
New in version 2.0.
SparkSession.createDataFrame(data, schema=None, samplingRatio=None)
根据一个RDD或者一个列表或者一个pandas.DataFrame创建DataFrame
当schema是list,每一列的类型将从data推断
当schema是None, 它将尝试推断schema(列名称和类型)根据data,应该是一个RDD的行,或namedtuple,还是dict
当schema是DataType或者datatype string,schema必须匹配真实的data,或exception将在运行时抛出。如果给定的schema不是StructType,
它将作为它仅有的字段包含在一个StructType中,这个字段名字将是“value”,每条记录将包含在一个元组中,最后将转换成行。
如果schema推断是必须的,samplingRatio(抽样比例)将被用来推断schema的行的比例。如果samplingRatio是None,第一行将被使用。
Parameters: data – 一个任和一种SQL数据(e.g. row, tuple, int, boolean, etc.)表示的RDD,或者list,或pandas.DataFrame.
schema – a DataType or a datatype string or a list of column names, default is None. The data type string format equals to DataType.simpleString, except that top level struct type can omit the struct<> and atomic types use typeName() as their format,
例如. 使用byte代替非常小的整数for ByteType. 我们也可以是使用int作为一个短名称for IntegerType.
samplingRatio – 用作推断每行样本比例
Returns: DataFrame
Changed in version 2.0: The schema parameter can be a DataType or a datatype string after 2.0. If it’s not a StructType, it will be wrapped into a StructType and each record will also be wrapped into a tuple.
>>> a = [('Alice', 1)] >>> spark.createDataFrame(a).collect() [Row(_1=u'Alice', _2=1)] >>> spark.createDataFrame(a, ['name', 'age']).collect() [Row(name=u'Alice', age=1)]
>>> d = [{'name': 'Alice', 'age': 1}] >>> spark.createDataFrame(d).collect() [Row(age=1, name=u'Alice')]
>>> rdd = sc.parallelize(a) >>> spark.createDataFrame(rdd).collect() [Row(_1=u'Alice', _2=1)] >>> df = spark.createDataFrame(rdd, ['name', 'age']) >>> df.collect() [Row(name=u'Alice', age=1)]
>>> from pyspark.sql import Row >>> Person = Row('name', 'age') >>> person = rdd.map(lambda r: Person(*r)) >>> df2 = spark.createDataFrame(person) >>> df2.collect() [Row(name=u'Alice', age=1)]
>>> from pyspark.sql.types import * >>> schema = StructType([ ... StructField("name", StringType(), True), ... StructField("age", IntegerType(), True)]) >>> df3 = spark.createDataFrame(rdd, schema) >>> df3.collect() [Row(name=u'Alice', age=1)]
>>> spark.createDataFrame(df.toPandas()).collect() [Row(name=u'Alice', age=1)] >>> spark.createDataFrame(pandas.DataFrame([[1, 2]])).collect() [Row(0=1, 1=2)]
>>> spark.createDataFrame(rdd, "a: string, b: int").collect() [Row(a=u'Alice', b=1)] >>> rdd = rdd.map(lambda row: row[1]) >>> spark.createDataFrame(rdd, "int").collect() [Row(value=1)] >>> spark.createDataFrame(rdd, "boolean").collect() Traceback (most recent call last): ... Py4JJavaError: ...
SparkSession.newSession()
返回一个新的SparkSession作为新的session,新的session拥有各自的SQLConf,临时注册的views and UDFs,但是共享的SparkContext and table会存储起来
New in version 2.0.
SparkSession.range(start, end=None, step=1, numPartitions=None)
创建一个以单独的Long类型列名为id的DataFrame,包含元素在一个范围内从start到end(exclusive独有的)步长值为step
Parameters: start – 起始值
end – 结束值 (exclusive)
step – 增值步长 (default: 1)
numPartitions – DataFrame的分区数
Returns: DataFrame
>>> spark.range(1, 7, 2).collect()
[Row(id=1), Row(id=3), Row(id=5)]
如果只指定一个参数,他将被用于end值
>>> spark.range(3).collect()
[Row(id=0), Row(id=1), Row(id=2)]
New in version 2.0.
SparkSession.read
返回一个DataFrameReader,它可以被用来从DataFrame中读取数据
Returns: DataFrameReader
New in version 2.0.
SparkSession.readStream
返回一个DataFrameReader,它可以被用来从一个streaming DataFrame中读取数据流
Note Experimental.
Returns: DataStreamReader
New in version 2.0.
SparkSession.sparkContext
返回一个潜在的SparkContext.
New in version 2.0.
SparkSession.sql(sqlQuery)
返回一个DataFrame,值为给定的SQL查询语句查询的结果
Returns: DataFrame
>>> df.createOrReplaceTempView("table1") >>> df2 = spark.sql("SELECT field1 AS f1, field2 as f2 from table1") >>> df2.collect() [Row(f1=1, f2=u'row1'), Row(f1=2, f2=u'row2'), Row(f1=3, f2=u'row3')]
New in version 2.0.
SparkSession.stop()
停止潜在的SparkContext
New in version 2.0.
SparkSession.streams
Returns a StreamingQueryManager that allows managing all the StreamingQuery StreamingQueries active on this context.
Note Experimental.
Returns: StreamingQueryManager
New in version 2.0.
SparkSession.table(tableName)
返回指定的表作为DataFrame
Returns: DataFrame
>>> df.createOrReplaceTempView("table1") >>> df2 = spark.table("table1") >>> sorted(df.collect()) == sorted(df2.collect())
True
New in version 2.0.
SparkSession.udf
Returns a UDFRegistration for UDF registration.
Returns: UDFRegistration
New in version 2.0.
SparkSession.version
The version of Spark on which this application is running.
New in version 2.0.