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

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

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

【问题讨论】:

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

标签: scala hadoop apache-spark hive parquet


【解决方案1】:

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

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

【讨论】:

    【解决方案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 超链接,您可以遍历并找到其他不太明确的论点的详细信息 例如。 formatoptions 在 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

      【讨论】:

      猜你喜欢
      • 2021-01-20
      • 2021-04-20
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      相关资源
      最近更新 更多