尝试覆盖 Hive 分区时写入 __HIVE_DEFAULT_PARTITION__ 的行已损坏

2024-03-18

当尝试使用 Spark 2.3 覆盖 Hive 表中的分区时,我看到一些非常奇怪的行为

首先,我在构建 SparkSession 时设置以下设置:

.config("spark.sql.sources.partitionOverwriteMode", "dynamic")

然后,我将一些数据复制到新表中,并按 date_id 列进行分区。

ds
  .write
  .format("parquet")
  .option("compression", "snappy")
  .option("auto.purge", "true")
  .mode(saveMode)
  .partitionBy("date_id")
  .saveAsTable("tbl_copy")

我可以在HDFS中看到相关的date_id目录已经创建。

然后,我创建一个 DataSet,其中包含我希望覆盖的分区的数据,其中包含单个 date_id 的数据,并将其插入到 Hive 中,如下所示:

  ds
    .write
    .mode(SaveMode.Overwrite)
    .insertInto("tbl_copy")

作为完整性检查,我将相同的数据集写入新表。

      ds
        .write
        .format("parquet")
        .option("compression", "snappy")
        .option("auto.purge", "true")
        .mode(SaveMode.Overwrite)
        .saveAsTable("tmp_tbl")

tmp_tbl 中的数据与预期完全一致。

然而,当我查看 tbl_copy 时,我看到一个新的 HDFS 目录 `date_id=HIVE_DEFAULT_PARTITION

查询 tbl_cpy

SELECT * from tbl_copy WHERE date_id IS NULL

我看到应该插入分区 date_id=20180523 的行,但是 date_id 列为空,并且不相关的 row_changed 列已填充值 20180523。

看来插入 Hive 不知何故导致我的数据被破坏。将相同的数据集写入新表不会导致任何问题。

有人能解释一下吗?


因此看来分区列必须是数据集中的最后一个。

我通过将以下方法添加到 Dataset[T] 上解决了这个问题。

def partitionsTail(partitionColumns: Seq[String]) = {
  val columns = dataset.schema.collect{ case s if !partitionColumns.contains(s.name) => s.name} ++ partitionColumns

  dataset.select(columns.head, columns.tail: _*).as[T]
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试覆盖 Hive 分区时写入 __HIVE_DEFAULT_PARTITION__ 的行已损坏 的相关文章

随机推荐

  • 具有不同 uv 坐标的 OpenGL ES 1 多重纹理

    我需要使用多重纹理渲染一个对象 但两个纹理对于同一对象具有不同的 uv 坐标 一张是法线贴图 另一张是光照贴图 请提供与此相关的任何有用材料 在 OpenGL ES 2 中 无论如何你都会使用着色器 因此 您可以完全自由地使用您喜欢的任何纹
  • 为 RDBMS(MySQL 数据库)创建 SPARQL 端点的最佳方法

    我正在 想做 一些链接开放数据集的实验 特别是政府推出的实验 我有一个 RDBMS 更具体地说是 MySQL 我设计它时考虑了语义网络的想法 即我将信息存储为对象 谓词和定义对象的类 反过来 所有对象通过主语 gt 谓词 gt 宾语形式的语
  • OpenId + 记住我/保持登录状态

    我有一个问题 关于如何 什么是使用 OpenId 并提供保持登录状态的最佳方法 例如 如果我查看 Stackoverflow 我已经使用 Google 登录 如果我关闭浏览器并返回 它仍然显示我已登录 However 我没有登录谷歌 而且我
  • Rails 引擎存在外键问题

    我正在开发一个 Rails 引擎 这是我的gem gemspec s required ruby version gt 2 0 0 s add dependency rails gt 4 2 0 s add dependency enume
  • angularjs - 在范围或 ng-model 上使用“字符串”名称

    在普通的 JavaScript 中 你可以像这样声明变量 var obj obj item text obj item text 这里给出的例子 http jsbin com petafu 1 edit http jsbin com pet
  • Google Play 排行榜 UI 颜色更改

    在我刚刚开发的游戏中 直到一周前 排行榜 UI 颜色还是深半透明的绿色 这看起来感觉很好 至少对眼睛不刺激 突然之间 它变成了明亮的半透明红色 并且从那时起就一直保持这种颜色 这种颜色与我游戏的任何阶段的任何屏幕都不匹配 这是我的排行榜屏幕
  • 如何在 Dart 中创建 HTML 链接?

    我想用 Dart 创建一个 HTML 链接 在 HTML 中我会写 You can click a href url 1 here a and a href url 2 there a 我不知道如何在 Dart 中做到这一点 我尝试过类似的
  • Python xlwt 创建错误的 Excel 书

    我正在尝试使用xlwt创建具有多个选项卡的输出文件 xlsx 格式 我的Python版本号是2 7 我使用Aptana Studio 3作为IDE 我用过xlwt包之前 具有相同的环境 执行相同的任务 效果很好 但这一次 一开始运行良好 然
  • 将 gcc libs .data 放在特定部分?

    我正在尝试为我们的嵌入式系统切换到 GNU GCC 编译器 但由于我们芯片的内存布局被分割 我在链接该项目时遇到了问题 RAM section 1 0x10000 0x12FFF RAM section 2 0x18000 0x1BFFF
  • Express js中通过id删除mongodb文档

    我正在为此抓狂 尝试通过 id 删除文档 router delete api menu delete id function req res var id req params id db get collection menu funct
  • 如何在自定义验证属性中获取/注入服务

    我们使用 NET Core 3 1 5 这是一个 Blazor 服务器应用程序 我们有一个 ValidationAttribute 并需要访问外部服务来验证对象 ValidationAttribute 有 IsValid 方法 protec
  • 有没有办法在 C# 中修改进程 DACL

    我有更改进程 DACL 的遗留 C 代码 并尝试使用 NET 3 5 中的托管代码类 我在网上找到了代码 其中有人创建了一个 SetAclOnServices 类 该类扩展了服务的 NativeObjectSecurity 类 我认为我可以
  • jQuery 数据表中的列排序

    我已经了解了 jQuery 数据表插件中的列排序以及控制它的各种方法 我有一个查询是否可以通过单击上箭头图标将按升序和下箭头图标进行排序的方式控制排序会按降序排序吗 有两种方法可以做到这一点 具体取决于datatables版本 编辑数据表版
  • 如何在Python中将一个对象的所有属性复制到另一个对象?

    在Python中 是否有一个库方法可以复制同一类的两个 已经存在的 实例之间的所有属性 我的意思是 类似 Apache Commons 的东西PropertyUtilsBean copyProperties Try destination
  • ActiveRecord 查询比直接 SQL 慢得多?

    我一直致力于优化项目的数据库调用 我注意到下面两个相同的调用之间的性能存在 显着 差异 connection ActiveRecord Base connection pgresult connection execute SELECT S
  • 当我“推”到 Bitbucket 时,可以从 VPS 中“拉”一个钩子

    我正在 Bitbucket 中管理我的 WordPress 模板 每次我push主题 我必须登录我的 VPS 服务器并且pull回购协议 我想自动完成 如果我自己运行 git daemon 我找到了一个解决方案 推送到服务器后执行自动拉取请
  • 基于现有模板生成Word文档的最佳方法是什么

    TL DR 我可以使用 NET 生成 Word 文档 如 XAML ItemTemplates 吗 我发现很难找到一个满足我所有要求的解决方案 所以我想我会把它扔到 stackoverflow 希望有人能指导我 非常感谢 简单来说 我需要根
  • 如何根据条目的长度过滤 pandas 数据框

    在 pandas 数据框中 我有一个字段 amp 应由长度为 495 的列表填充 是否有一种 pandas ic 方法可以快速过滤此长度 使得具有字段 amp 的所有行不等于 495被丢弃 I tried df len df amp 495
  • 如何将 SQL 查询与不同的表达式结合起来?

    我的三个查询已经达到了我的 SQL 知识的顶峰 Microsoft SQL 2005 如果这很重要 现在我需要将它们组合成一个查询 并将所有值放在一行上 我的实际查询如下 但我认为如果我在这里提供一个简单的版本会更容易 查询一 Provid
  • 尝试覆盖 Hive 分区时写入 __HIVE_DEFAULT_PARTITION__ 的行已损坏

    当尝试使用 Spark 2 3 覆盖 Hive 表中的分区时 我看到一些非常奇怪的行为 首先 我在构建 SparkSession 时设置以下设置 config spark sql sources partitionOverwriteMode