SparkSession作为Dataset和DataFrame 进行Spark编程的入口点。SparkSession可用于创建DataFrame,将DataFrame注册为表,在表上执行SQL,缓存表以及读取文件。
启动spark程序
from pyspark.sql import SparkSession
spark=SparkSession.builder.appName("local").enableHiveSupport().getOrCreate()
sc=spark.sparkContext
- builder()表示构建sparksession实例。
- appName()表是设置的程序名称,可以显示在Spark UI中。
- enableHiveSuport()的作用是启用Hive支持,包括与持久性Hive Metastore的连接,对Hive serdes的支持以及Hive用户定义的功能。
- getOrCreate()表示获取现有SparkSession,如果没有现有SparkSession,则根据此构建器中设置的选项创建新SparkSession。此方法首先检查是否存在有效的全局默认SparkSession,如果是,则返回该值。 如果不存在有效的全局默认SparkSession,则该方法将创建新的SparkSession并将新创建的SparkSession指定为全局默认值。
创建createDataFrame(data, schema=None)
- 可以从RDD,列表或pandas.DataFrame创建DataFrame。
- 当schema是列名列表时,将从数据推断每列的类型。
- 当schema为None时,它将尝试从数据推断出模式(列名和类型),数据应该是Row的RDD,或者是namedTuple或dict。
使用dict或者tuple创建dataframe
>>> spark.createDataFrame(l, ['name', 'age']).collect()
[Row(name='Alice', age=1)]
>>> d = [{'name': 'Alice', 'age': 1}]
>>> spark.createDataFrame(d).collect()
[Row(age=1, name='Alice')]
使用RDD创建dataframe
>>> rdd = sc.parallelize(l)
>>> spark.createDataFrame(rdd).collect()
[Row(_1='Alice', _2=1)]
>>> df = spark.createDataFrame(rdd, ['name', 'age'])
>>> df.collect()
[Row(name='Alice', age=1)]
利用StructType设置字段类型创建datagrame
>>> from pyspark.sql.types import *
>>> schema = StructType([
... StructField("name", StringType(), True),
... StructField("age", IntegerType(), True)])
>>> df3 = spark.createDataFrame(rdd, schema)
>>> df3.collect()
[Row(name='Alice', age=1)]
利用pandas创建dataframe
>>> spark.createDataFrame(df.toPandas()).collect()
[Row(name='Alice', age=1)]
>>> spark.createDataFrame(pandas.DataFrame([[1, 2]])).collect()
[Row(0=1, 1=2)]
利用字符串设置schema,创建dataframe
>>> spark.createDataFrame(rdd, "a: string, b: int").collect()
[Row(a='Alice', b=1)]
sql(sqlQuery)
对指定的表进行sql查询,返回一个dataframe。
d = [{'name': 'Alice', 'age': 1}]
df=spark.createDataFrame(d)
df.createOrReplaceTempView("table")
spark.sql("select name,age from table").collect()
#Row(name='Alice', age=1)]
createOrReplaceTempView(“table”)表示创建一个临时表。
table(tableName)
对指定的表返回dataframe
>>> df.createOrReplaceTempView("table1")
>>> df2 = spark.table("table1")
>>> sorted(df.collect()) == sorted(df2.collect())
True
以上就是sparksession的常见API,当然远不止这些,后面接触到继续补充。