用DataSet和DataFrame编写Spark程序的入口
执行如下代码可生成一个SparkSession对象:
>>> spark = SparkSession.builder \
... .master("local") \
... .appName("Word Count") \
... .config("spark.some.config.option", "some-value") \
... .getOrCreate()
SparkSession的构造器:
给应用设置一个名称,可在Spark的web界面上显示.如果名称已占用,则会随机生成一个.
界面地址默认为localhost:4040
(2.0版本新增)
配置项,在创建SparkSession和SparkConf时都会被隐式地调用
(2.0版本新增)
对于一个已创建的SparkConf对象,使用conf参数
>>> from pyspark.conf import SparkConf
>>> SparkSession.builder.config(conf=SparkConf())
.sql.session...
使用键值对传参时可隐藏参数名
>>> SparkSession.builder.config("spark.some.config.option", "some-value")
.sql.session...
提供Hive支持,可以连接到统一的Hive元数据,支持Hive serdes和Hive自定义函数
(2.0版本新增)
获取已存在的SparkSession实例,若不存在则根据构造器的配置内容创建一个
(2.0版本新增)
若存在一个默认切有效的全局SparkSession实例的情况下,该方法返回已存在的SparkSession实例;若不存在,则创建一个SparkSession实例并将其标记为全局默认的
>>> s1 = SparkSession.builder.config("k1", "v1").getOrCreate()
>>> s1.conf.get("k1") == s1.sparkContext.getConf().get("k1") == "v1"
True
对已存在的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
设置要连接的Spark主节点URL,"local"表示在本地运行,"local[4]"表示在本地调用4个核心运行,"spark://master:7077"表示单节点运行
(2.0版本新增)
SparkSession.builder =
一个接口,用户可以通过这个接口对底层的数据库,表,函数等进行增删改查操作
(2.0版本新增)
Spark运行时的配置接口,用户可以通过这个接口获取与Spark SQL相关的所有Spark和Hadoop配置项,同时也可以对这些配置进行修改.当要获取配置信息时,默认返回底层SparkContext设置(如果存在的话)
(2.0版本新增)
根据一个RDD,list或者pandas.DataFrame生成DataFrame
若schema为列名组成的list,Spark会根据每个列的值来推断类型
若schema为None,Spark将根据每个列的值来推断类型和列名,可以为RDD的Row,nametuple或dict
若schema为pyspark.sql.types.DataType或表示datatype的字符串,必须与真实的数据相匹配,否则运行时将抛出异常.若schema不为pyspark.sql.types.StructType,它将作为唯一的域封装为StructType,并且域的名称为"value",每条记录都会被封装进tuple,随后转换为row.
如果需要确定schema,samplingRatio将被用来确定用于schema推断的rows的比例.
(2.0版本新增,...2.1版本中增加了verifySchema参数)
翻译的太烂了,以后加深理解再回来翻译一遍吧.....( T___T )
>>> l = [('Alice', 1)]
>>> spark.createDataFrame(l).collect()
[Row(_1=u'Alice', _2=1)]
>>> spark.createDataFrame(l, ['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(l)
>>> 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会话,该会话有独立的SQLConf,临时视图和自定义函数,但共享SparkContext和已缓存的表
(2.0版本新增)
创建一个只有一列的DataFrame,列数据的类型为pyspark.sql.types.LongType,列名为'id',该列的值为[start,end),步长默认为1
(2.0版本新增)
>>> spark.range(1, 7, 2).collect()
[Row(id=1), Row(id=3), Row(id=5)]
这个range的生成方式跟python相同
>>> spark.range(3).collect()
[Row(id=0), Row(id=1), Row(id=2)]
返回一个DataFrameReader,可用于读取多种格式的文件,生成DataFrame
(2.0版本新增)
用于读取数据流生成流式DataFrame,还处于实验阶段
(2.0版本新增)
返回底层sparkContext
(2.0版本新增)
将sql语句对应的查询结果以DataFrame的形式返回
(2.0版本新增)
>>> df = spark.createDataFrame([{'name':'cjh','id':158},{'name':'cjhjh','id':159}])
>>> df.createOrReplaceTempView("table1")
>>> df2 = spark.sql("SELECT name AS f1, id as f2 from table1")
>>> df2.collect()
[Row(f1='cjh', f2=158), Row(f1='cjhjh', f2=159)]
终止底层SparkContext,释放资源
(2.0版本新增)
返回一个StreamQueryManager,管理所有的StreamingQuery
(2.0版本新增)
将临时视图以DataFrame的形式返回
(2.0版本新增)
>>> df.createOrReplaceTempView("table1")
>>> df2 = spark.table("table1")
>>> sorted(df.collect()) == sorted(df2.collect())
True
返回SparkSession.udf,用于创建自定义函数
(2.0版本新增)
当前Spark的版本号
(2.0版本新增)
查看原文