11.pyspark.sql.DataFrameWriter

Spark SQL和DataFrames重要的类有:

  • pyspark.sql.SQLContext: DataFrame和SQL方法的主入口
  • pyspark.sql.DataFrame: 将分布式数据集分组到指定列名的数据框中
  • pyspark.sql.Column :DataFrame中的列
  • pyspark.sql.Row: DataFrame数据的行
  • pyspark.sql.HiveContext: 访问Hive数据的主入口
  • pyspark.sql.GroupedData: 由DataFrame.groupBy()创建的聚合方法集
  • pyspark.sql.DataFrameNaFunctions: 处理丢失数据(空数据)的方法
  • pyspark.sql.DataFrameStatFunctions: 统计功能的方法
    -pyspark.sql.functions DataFrame:可用的内置函数
  • pyspark.sql.types: 可用的数据类型列表
  • pyspark.sql.Window: 用于处理窗口函数

11.pyspark.sqlDataFrameWriter:用于将[[DataFrame]]写入外部存储系统(例如文件系统,键值存储等)的接口。使用DataFrame.write()来访问这个。

11.1.format(source):指定输入数据源格式。
1.source:string,数据源名称,例如:'json','parquet'
>>> df.write.format('json').save(os.path.join(tempfile.mkdtemp(), 'data'))
11.2.jdbc(url,table,model=None,properties=None):通过JDBC将DataFrame的内容保存到外部数据库表中。

注:不要在大型集群上并行创建踏跺分区,否则spark可能会使外部数据系统崩溃

● url – 一个形式为jdbc:subprotocol:subname的JDBC URL
● table – 外部数据库中表的名称。
● mode – 指定数据已经存在时保存操作的行为:
● append: 将此DataFrame的内容附加到现有数据。
● overwrite: 覆盖现有数据。
● ignore: 如果数据已经存在,静默地忽略这个操作。
● error (默认): 如果数据已经存在,则抛出异常。
● properties – JDBC数据库连接参数,任意字符串标签/值的列表。 通常至少应该包括一个“用户”和“密码”属性。
11.3.json(path,schma=None):以指定的路径以JSON格式保存DataFrame的内容。
● path – 任何Hadoop支持的文件系统中的路径。
● mode –指定数据已经存在时保存操作的行为。
● append: 将此DataFrame的内容附加到现有数据。
● overwrite: 覆盖现有数据。
● ignore: 如果数据已经存在,静默地忽略这个操作。
● error (默认): 如果数据已经存在,则抛出异常。

>>> l=[('Alice',2),('Bob',5)]
>>> df = sqlContext.createDataFrame(l,['name','age'])
>>> df.write.json('file:///data/dfjson')

[root@slave1 dfjson]# ll
total 8
-rw-r--r-- 1 root root  0 Nov 24 12:08 part-r-00000-edbd9c5e-87b2-41f4-81ba-cd59c8ca490e
-rw-r--r-- 1 root root 25 Nov 24 12:08 part-r-00001-edbd9c5e-87b2-41f4-81ba-cd59c8ca490e
-rw-r--r-- 1 root root  0 Nov 24 12:08 part-r-00002-edbd9c5e-87b2-41f4-81ba-cd59c8ca490e
-rw-r--r-- 1 root root 23 Nov 24 12:08 part-r-00003-edbd9c5e-87b2-41f4-81ba-cd59c8ca490e
-rw-r--r-- 1 root root  0 Nov 24 12:08 _SUCCESS

[root@slave1 dfjson.json]# cat part*
{"name":"Alice","age":2}
{"name":"Bob","age":5}
11.4.mode(saveMode):指定数据或表已经存在的行为。
saveMode选项包括:
  append: 将此DataFrame的内容附加到现有数据。
  overwrite: 覆盖现有数据。
  error: 如果数据已经存在,则抛出异常。
  ignore: 如果数据已经存在,静默地忽略这个操作。

>>> df.write.mode('append').parquet(os.path.join(tempfile.mkdtemp(), 'data'))
11.5.option(key,value): 添加一个底层数据源的输出选项。
11.6.options(**options):添加底层数据源的多个输出选项。
11.7.orc(path, mode=None, partitionBy=None):以指定的路径以ORC格式保存DataFrame的内容。

注:目前ORC支持只能与HiveContext一起使用。

● path – 任何Hadoop支持的文件系统中的路径。
● mode –指定数据已经存在时保存操作的行为:
  append: 将此DataFrame的内容附加到现有数据。
  overwrite: 覆盖现有数据。
  ignore: 如果数据已经存在,静默地忽略这个操作。
  error (默认): 如果数据已经存在,则抛出异常。
● partitionBy – 分区列的名称。

>>> orc_df = hiveContext.read.orc('python/test_support/sql/orc_partitioned')
>>> orc_df.write.orc(os.path.join(tempfile.mkdtemp(), 'data'))
11.8.parquet(path, mode=None, partitionBy=None)
将DataFrame的内容以Parquet格式保存在指定的路径中。
参数:● path – 任何Hadoop支持的文件系统中的路径。
           ● mode – 指定数据已经存在时保存操作的行为。
      append: 将此DataFrame的内容附加到现有数据。
      overwrite: 覆盖现有数据。
      ignore: 如果数据已经存在,静默地忽略这个操作。
      error (默认): 如果数据已经存在,则抛出异常。
     ● partitionBy – 分区列的名称。

>>> df.write.parquet("file:///data/dfparquet")

[root@slave1 dfparquet]# ll
total 24
-rw-r--r-- 1 root root 285 Nov 24 12:23 _common_metadata
-rw-r--r-- 1 root root 750 Nov 24 12:23 _metadata
-rw-r--r-- 1 root root 285 Nov 24 12:23 part-r-00000-36364710-b925-4a3a-bd11-b295b6bd7c2e.gz.parquet
-rw-r--r-- 1 root root 534 Nov 24 12:23 part-r-00001-36364710-b925-4a3a-bd11-b295b6bd7c2e.gz.parquet
-rw-r--r-- 1 root root 285 Nov 24 12:23 part-r-00002-36364710-b925-4a3a-bd11-b295b6bd7c2e.gz.parquet
-rw-r--r-- 1 root root 523 Nov 24 12:23 part-r-00003-36364710-b925-4a3a-bd11-b295b6bd7c2e.gz.parquet
-rw-r--r-- 1 root root   0 Nov 24 12:23 _SUCCESS
11.09.insertInto(tableName, overwrite=False):将DataFrame的内容插入到指定的表中。它要求DataFrame类的架构与表的架构相同。可以覆盖任何现有的数据。
11.10.partitionBy(*cols):按文件系统上的给定列对输出进行分区。如果指定,则输出将在文件系统上进行布局,类似于Hive的分区方案。
>>> df.write.partitionBy('year', 'month').parquet(os.path.join(tempfile.mkdtemp(), 'data'))
11.11.save(path=None, format=None, mode=None, partitionBy=None, **options):将DataFrame的内容保存到数据源。数据源由format和一组options指定。 如果未指定format,则将使用由spark.sql.sources.default配置的缺省数据源。
● path – Hadoop支持的文件系统中的路径。
● format – 用于保存的格式。
● mode – 指定数据已经存在时保存操作的行为。
  append: 将此DataFrame的内容附加到现有数据。
  overwrite: 覆盖现有数据。
  ignore: 如果数据已经存在,静默地忽略这个操作。
  error (默认): 如果数据已经存在,则抛出异常。
● partitionBy – 分区列的名称。
● options – all other string options
>>> l=[('Alice',2),('Bob',5)]
>>> df = sqlContext.createDataFrame(l,['name','age'])
>>> df.write.mode('append').save("file:///data/dfsave")
11.12.saveAsTable(name, format=None, mode=None, partitionBy=None, **options):将DataFrame的内容保存为指定的表格。在表已经存在的情况下,这个函数的行为依赖于由mode函数指定的保存模式(默认为抛出异常)。 当模式为覆盖时,[[DataFrame]]的模式不需要与现有表的模式相同。
append: 将此DataFrame的内容附加到现有数据。
overwrite: 覆盖现有数据。
error: 如果数据已经存在,则抛出异常。
ignore: 如果数据已经存在,静默地忽略这个操作。
参数:● name – 表名
           ● format – 用于保存的格式
           ● mode – 追加,覆盖,错误,忽略之一(默认:错误)
           ● partitionBy – 分区列的名称
           ● options – 所有其他字符串选项
11.13.text(path):将DataFrame的内容保存在指定路径的文本文件中。DataFrame必须只有一个字符串类型的列。每行成为输出文件中的新行。

引用原文

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

推荐阅读更多精彩内容