pyspark.sql.SparkSession


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,当然远不止这些,后面接触到继续补充。

发布了24 篇原创文章 · 获赞 2 · 访问量 1188

猜你喜欢

转载自blog.csdn.net/qq_40176087/article/details/100026015