中文文档 pyspark.sql.SQLContext

pyspark.sql.SQLContext:DataFrame和SQL功能的主要入口点.

1:pyspark.sql.SQLContext

1.1 class pyspark.sql.SQLContext(sparkContextsqlContext=None)

SQLContext用来创建DataFrame、注册DataFrame为表、在表上执行SQL、缓存表、读取parquet文件。

参数:●sparkContext - 支持sqlcontext的sparkcontext

           sqlContext - 一个可选的JVM Scala sqlcontext,若设置,我们不需要在JVM实例化一个新的sqlcontext,而是都调用这个对象.

1.2 applySchema(rdd, schema):在1.3中已过时,使用createDataFrame()代替.

1.3 cacheTable(tableName):在内存中缓存指定的表.版本1.0中的新功能.

1.4 clearCache():从内存缓存中删除所有缓存表,版本1.3中的新功能.

1.5 createDataFrame(dataschema=NonesamplingRatio=None):版本1.3中的新功能.

    从tupe/list组成的rdd 或list或pandas.DataFrame创建DataFrame

    当schema是列名的列表时,每个列的类型会从数据中推断出来。

    当schema是None时,将尝试从数据中推断模式(列名和类型,数据应该是an rdd of row, or namedtuple,     or dict.。

    如果schema推理是必要的,samplingRatio用来确定用于模式推理的行比率。如果没有samplingratio,将使用第一行。

    参数:●data - an RDD of Row/tuple/list/dict, list, or pandas.DataFrame.

    ●schema – 一个结构化类型或者列名列表,默认是空。

    samplingRatio – 用于推断的行的样本比率。

    返回: DataFrame

# 来源于spark文档中的官方实例测试

from pyspark import SparkContext,SparkConf

from pyspark.sql import HiveContext

from pyspark.sql import SQLContext

from pyspark.sql import Row

from pyspark.sql.types import *

from pyspark.sql import functions as F

from pyspark.sql.functions import *

from pyspark.sql.functions import col

sqlContext = conf = SparkConf().setAppName("the apache sparksql")

sc = SparkContext(conf=conf)

>>> l = [('Alice', 1)]

>>> sqlContext.createDataFrame(l).collect()

[Row(_1=u'Alice', _2=1)]

>>> sqlContext.createDataFrame(l, ['name', 'age']).collect()

[Row(name=u'Alice', age=1)]

>>> d = [{'name': 'Alice', 'age': 1}]

>>> sqlContext.createDataFrame(d).collect()

[Row(age=1, name=u'Alice')]

>>> rdd = sc.parallelize(l)

>>> sqlContext.createDataFrame(rdd).collect()

[Row(_1=u'Alice', _2=1)]

>>> df = sqlContext.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 = sqlContext.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 = sqlContext.createDataFrame(rdd, schema)

>>> df3.collect()

[Row(name=u'Alice', age=1)]

>>> sqlContext.createDataFrame(df.toPandas()).collect() 

[Row(name=u'Alice', age=1)]

>>> sqlContext.createDataFrame(pandas.DataFrame([[1, 2]])).collect() 

[Row(0=1, 1=2)]

1.5 createExternalTable(tableNamepath=Nonesource=Noneschema=None**options):版本1.3中的新功能.

基于数据源中的数据集创建外部表.

返回与外部表关联的dataframe.

数据源由source和一组options指定。如果未指定源,那么将使用由spark.sql.sources.default 配置的默认的数据源配置。

一个模式可以被提供作为返回的DataFrame的模式,然后创建外部表。

Returns:dataframe

1.6 registerDataFrameAsTable(dftableName):版本1.3中的新功能.

注册给定的DataFrame作为目录中的临时表。

临时表只在当前SQLContext实例有效期间存在。

1.7 dropTempTable(tableName):版本1.6中的新功能.

从目录中删除临时表.

>>>sqlContext.registerDataFrameAsTable(df,"table1")

>>>sqlContext.dropTempTable("table1")

1.8 getConf(keydefaultValue):版本1.3中的新功能.

返回Spark SQL的配置属性值

入职值没有设定则返回默认值.

classmethod getOrCreate(sc):版本1.6中的新功能.

获取现有的SQLContext或使用给定的SparkContext创建一个新的SQLContext。

Parameters:sc – SparkContext

setConf(keyvalue):版本1.3后的新功能.

设置给定的Spark SQL配置属性

1.9 inferSchema(rddsamplingRatio=None):在版本1.3中已过时,使用createDataFrame()代替.

1.10 jsonFile(pathschema=NonesamplingRatio=1.0):在版本1.4中已过时,使用DataFrameReader.json()代替. 从一个文本文件中加载数据,这个文件的每一行均为JSON字符串.

sqlContext.jsonFile('python/test_support/sql/people.json').dtypes[('age', 'bigint'), ('name', 'string')]

1.11 jsonRDD(rddschema=NonesamplingRatio=1.0)

从一个已经存在的RDD中加载数据,这个RDD中的每一个元素均为一个JSON字符串。

如果提供了模式,将给定的模式应用到这个JSON数据集。否则,它根据数据集的采样比例来确定模式。

1.12 load(path=None, source=None, schema=None, **options):1.4版本中已过时,使用DataFrameReader.load()代替.返回数据源中的数据集为DataFrame.

1.13  newSession():版本1.6中的新功能.

返回一个新的SQLContext做为一个新的会话,这个会话有单独的SQLConf,注册临时表和UDFs,但共享sparkcontext和缓存表。

1.14 parquetFile(*paths):版本1.4中已过时,使用DataFrameReader.parquet()代替.

加载Parquet文件,返回结果为DataFrame

1.15 range(start, end=None, step=1, numPartitions=None):

创建只有一个名为id的长类型的列的DataFrame,包含从开始到结束的按照一定步长的独立元素。

    参数:●start - 开始值

    ●end -  结束值

    ●step - 增量值(默认:1)

    ●numPartitions – DataFrame分区数

    返回: DataFrame

sqlContext.range(1,7,2).collect()

1.16 read:版本1.4中的新功能.

返回一个DataFrameReader,可用于读取数据为DataFrame。

Returns:DataFrameReader

1.17 registerFunction(namefreturnType=StringType):版本1.2后的新功能

注册python方法(包括lambda方法),作为UDF,这样可以在 SQL statements中使用。

除了名称和函数本身之外,还可以选择性地指定返回类型。当返回类型没有指定时,默认自动转换为字符串。对于任何其他返回类型,所生成的对象必须与指定的类型匹配。

参数:●  name - UDF名称

●  f – python方法

      ●  返回类型 数据类型对象

>>> sqlContext.registerFunction("stringLengthString",lambdax:len(x))

>>> sqlContext.sql("SELECT stringLengthString('test')").collect()[Row(_c0=u'4')]

>>> frompyspark.sql.typesimportIntegerType

>>> sqlContext.registerFunction("stringLengthInt",lambdax:len(x),IntegerType())

>>> sqlContext.sql("SELECT stringLengthInt('test')").collect()[Row(_c0=4)]

1.18 sql(sqlQuery):New in version 1.0.

返回DataFrame代表给定查询的结果

>>>l=[(1,'row1'),(2,'row2'),(3,'row3')]

>>>df = sqlContext.createDataFrame(l['field1','field2'])

>>>sqlContext.registerDataFrameAsTable(df,"table1")

>>>df2 = sqlContext.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')]

1.19 table(tableName)

返回指定的表为DataFrame

>>>l=[(1,'row1'),(2,'row2'),(3,'row3')]

>>>df = sqlContext.createDataFrame(l,['field1','field2'])

>>>sqlContext.registerDataFrameAsTable(df,"table1")

>>>df2 = sqlContext.table("table1")

>>>sorted(df.collect()) == sorted(df2.collect())

1.20 tableNames(dbName=None)  :New in version 1.3.

返回数据库的表名称列表

参数dbName – 字符串类型的数据库名称.默认为当前的数据库。

返回: 字符串类型的表名称列表

>>> sqlContext.registerDataFrameAsTable(df,"table1")

>>> "table1"insqlContext.tableNames()True

>>> "table1"insqlContext.tableNames("db")True

1.21 tables(dbName=None):版本1.3后新出的功能.

返回给定的数据库包含表名称的DataFrame。

如果数据库名没有指定,将使用当前的数据库。

返回的DataFrame包含两列: 表名称和是否临时表 (一个Bool类型的列,标识表是否为临时表)。

参数:● dbName – 字符串类型的使用的数据库名

返回: DataFrame

>>> sqlContext.registerDataFrameAsTable(df,"table1")

>>> df2=sqlContext.tables()

>>> df2.filter("tableName = 'table1'").first()

Row(tableName=u'table1', isTemporary=True)

1.22 udf:版本1.3.1新出的功能

返回一个注册的UDF为UDFRegistration.

返回: UDFRegistration

1.23 uncacheTable(tableName):版本1.0新出的功能

从内存的缓存表中移除指定的表.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容