Spark:可以使用 DataFrame.saveAsTable 或 DataFrameWriter.options 传递哪些选项?

Posted

技术标签:

【中文标题】Spark:可以使用 DataFrame.saveAsTable 或 DataFrameWriter.options 传递哪些选项?【英文标题】:Spark: what options can be passed with DataFrame.saveAsTable or DataFrameWriter.options? 【发布时间】:2015-10-07 20:23:23 【问题描述】:

无论是开发人员还是 API 文档都没有包含任何关于可以在 DataFrame.saveAsTableDataFrameWriter.options 中传递哪些选项的参考,它们会影响 Hive 表的保存。

我希望在这个问题的答案中,我们可以汇总信息,这些信息对希望更多控制 Spark 保存表的方式的 Spark 开发人员有所帮助,或许还可以为改进 Spark 的文档提供基础。

【问题讨论】:

不过,这对于 SO 来说有点模糊和开放。你在找什么?只是如何保存到蜂巢? @JustinPihony 我知道有人会误读标题。我对其进行了更新以使其更加明确。谢谢你的评论。需要明确的是,问题不在于如何保存 Hive 表。这是关于在保存 Hive 表时可以传递的未记录选项。 DataFrameWriter 可用的所有选项,我们可以传递给选项,例如格式、模式、partitionBy 等。顺便说一句,您正在寻找哪个选项? 【参考方案1】:

您没有在任何地方看到 options 记录的原因是它们是特定于格式的,开发人员可以使用一组新的 options 继续创建自定义写入格式。

但是,对于少数支持的格式,我列出了 spark 代码本身中提到的选项:

CSVOptions JDBCOptions JSONOptions ParquetOptions TextOptions OrcOptions AvroOptions

【讨论】:

【参考方案2】:

看看https://github.com/delta-io/delta/blob/master/src/main/scala/org/apache/spark/sql/delta/DeltaOptions.scala类“DeltaOptions”

目前,支持的选项有:

替换位置 合并架构 覆盖架构 maxFilesPerTrigger 排除正则表达式 忽略文件删除 忽略更改 忽略删除 优化写入 数据变化 查询名称 检查点位置 路径 timestampAsOf versionAsOf

【讨论】:

随着 Delta Lake 人气的增长,很高兴将 Delta 选项带入其中。【参考方案3】:

根据源码可以指定path选项(表示hdfs中hive外部数据的存储位置,在Hive DDL中翻译为'location')。 不确定您是否还有其他与 saveAsTable 相关的选项,但我会寻找更多。

【讨论】:

【参考方案4】:

根据最新的 spark 文档,以下是使用 .saveAsTable(name, format=None, mode=None, partitionBy=None, **options) API 将 DataFrame 写入外部存储时可以传递的选项

如果您单击文档右侧的source 超链接,您可以遍历并找到其他不太明确的论点的详细信息 例如。 format 和 options 在 DataFrameWriter 类下描述

所以当文档读取options – all other string options 时,它指的是options,它为您提供了spark 2.4.4 的以下选项

timeZone:设置用于格式化的时区字符串 JSON/CSV 数据源或分区值中的时间戳。如果未设置,则使用默认值,会话本地时区。

当它读取format – the format used to save时,它指的是format(source)

指定底层输出数据源。

参数

源 - 字符串,

数据源的名称,例如“json”、“镶木地板”。

希望这会有所帮助。

【讨论】:

这些只是 Python API 的一种方法的选项;还有更多。【参考方案5】:

版本之间的区别。

我们在 spark2 中有以下内容:

createOrReplaceTempView()
createTempView()
createOrReplaceGlobalTempView()
createGlobalView()

saveAsTable is deprecated in spark 2.

基本上这些是根据桌子的可用性来划分的。 请参考link

【讨论】:

问题似乎集中在可以将哪些选项传递给此类表,而不是可用于注册临时表(视图)的所有方法【参考方案6】:

saveAsTable(字符串表名)

将DataFrame的内容保存为指定的表格。

仅供参考 -> https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/sql/DataFrameWriter.html

【讨论】:

OP 特别想知道作为 DataFrameWriter 类的选项方法一部分的各种可用选项。这个 def 具体是:spark.apache.org/docs/2.3.0/api/java/org/apache/spark/sql/…

以上是关于Spark:可以使用 DataFrame.saveAsTable 或 DataFrameWriter.options 传递哪些选项?的主要内容,如果未能解决你的问题,请参考以下文章

SparkSQL--数据源Parquet的加载和保存

Python元组和内存

我们可以使用 spark-sql 或 apache spark 运行 sqoop 导入语句吗

是否可以将 Spark 中的 data.table 与 Spark Dataframes 一起使用?

是否可以使用 spark 的 jdbc 驱动程序将 apache spark 与 jasper 集成?

我可以使用 spark 数据帧创建序列文件吗?