如何覆盖在 Spark 中读取 DataFrame 的 parquet 文件

2023-11-23

这是我面临的问题的缩影,我遇到了错误。让我尝试在这里重现它。

我正在保存一个DataFrame as a parquet,但是当我重新加载时DataFrame from parquet文件并再次保存为parquet,我收到错误。

valuesCol = [('Male','2019-09-06'),('Female','2019-09-06'),('Male','2019-09-07')]
df = spark.createDataFrame(valuesCol,['sex','date'])
# Save as parquet
df.repartition(1).write.format('parquet').mode('overwrite').save('.../temp')

# Load it back
df = spark.read.format('parquet').load('.../temp')
df = df.where(col('sex')=='Male')
# Save it back - This produces ERROR   
df.repartition(1).write.format('parquet').mode('overwrite').save('.../temp')

错误信息 -

执行器 22): java.io.FileNotFoundException: 请求的文件 maprfs:///mapr/.../temp/part-00000-f67d5a62-36f2-4dd2-855a-846f422e623f-c000.snappy.parquet 不存在。底层文件可能已更新。 您可以通过运行“REFRESH”显式使 Spark 中的缓存失效 SQL 中的 TABLE tableName' 命令或通过重新创建数据集/数据帧 涉及。

另一个SOquestion解决这个问题。提议的解决方案是refresh该表类似于下面的代码,但这没有帮助。问题在于元数据的刷新。我不知道如何刷新它。

df.createOrReplaceTempView('table_view')
spark.catalog.refreshTable('table_view')
df.repartition(1).write.format('parquet').mode('overwrite').save('.../temp')

此问题的解决方法:解决这个问题的一个不优雅的方法是保存DataFrame as parquet具有不同名称的文件,然后删除原始文件parquet文件,最后重命名它parquet文件更改为旧名称。

# Workaround
import os
import shutil

# Load it back
df = spark.read.format('parquet').load('.../temp')

# Save it back as temp1, as opposed to original temp      
df.repartition(1).write.format('parquet').mode('overwrite').save('.../temp1')

# Delete the original parquet file
shutil.rmtree('.../temp')

# Renaming the parquet folder.
os.rename('.../temp1','.../temp')

但是,问题是某些 DataFrame 非常大,这可能不是处理它的最佳方法。更不用说重命名是否会导致元数据出现一些问题,我不确定。


此错误的一种解决方案是缓存,对 df 执行操作(例如:df.show()),然后以“覆盖”模式保存镶木地板文件。

在Python中:

save_mode = "overwrite"
df = spark.read.parquet("path_to_parquet")

....... make your transformation to the df which is new_df

new_df.cache()
new_df.show()

new_df.write.format("parquet")\
                .mode(save_mode)\
                .save("path_to_parquet")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何覆盖在 Spark 中读取 DataFrame 的 parquet 文件 的相关文章

  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代

随机推荐

  • C# 编译时将日期放入程序中

    我正在考虑如何创建一个仅在 X 时间内有效的程序 在 C 应用程序中 我的想法是 您可以将当前日期作为程序中的常量 并且它会检查它是否比该日期早 X 天 当然 我不想存储日期或程序之外的 X 因为它可能会被篡改 我也不想定期手动更改它并重新
  • Android 中具有后台活动点击行为的透明活动

    Hi stackoverflow我正在尝试开发一个具有基本活动和Transparent活动 到目前为止我能够创建一个Activity and a Transparent使用以下代码的活动超过基本活动 MainActivity java pu
  • 如何限制HTML5 input type="number"的用户输入字符长度?

    如何将 HTML5 中的用户输入限制为给定长度input type number 文本框 的答案 如何限制 HTML5 数字 元素中可能的输入 不处理非法输入
  • 雄猫6 | antiResourceLocking 和 antiJARLocking 的意义是什么?

    我正在开发一个项目 我们将使用 Tomcat 6 0 20 进行开发和生产 我遇到了一些与热部署相关的问题 需要在 server xml 中将 Context antiResourceLocking 设置为 false 我对 antiRes
  • 在 android 中对齐 TextView 内的文本

    因此 正如大多数人所知 Android 中的 TextView 内没有文本对齐 因此 我构建了一个自定义 TextView 来解决这个问题 然而 由于某种原因 有时标点符号在某些设备中会由于某种原因而断线 我在 LG G3 和模拟器 运行最
  • UIImagePickerController 返回不正确的图像方向

    我正在使用 UIImagePickerController 捕获图像然后存储它 然而 当我尝试重新缩放它时 我从该图像中得到的方向值是不正确的 当我举起手机拍照时 它会给我左方向 有人经历过这个问题吗 UIImagePickerContro
  • ASP.NET Core 中的 OAuth 授权服务

    在 Web API 2 中 您过去可以通过中间件设置 OAuth 授权服务器来创建端点来颁发令牌 如下所示 Set up our auth server options var OAuthServerOptions new OAuthAut
  • 如何在 C 中对指向 char 的指针数组进行 qsort?

    假设我有一个指向 C 中 char 的指针数组 char data 5 boda cydo washington dc obama 我希望使用 qsort 对该数组进行排序 qsort data 5 sizeof char compare
  • 如何通过 Selenium 和 Java 使用 setCapability() 忽略 Internet Explorer 的保护模式设置?

    我正在尝试使用 IE 在 java selenium 中进行测试 但我的问题是我必须继续在保护模式下配置设置 这是已弃用的替代方案 功能 WebDriver driver new InternetExplorerDriver cap 因为我
  • 如何在 rollupjs 中禁用 Tree Shaking

    我试图使用 RollUp js 将多个 javascript 文件捆绑在一起 但是当我这样做时 未使用的类会被删除 这个过程称为树抖动 我想禁用它 我已经发现this但似乎没有任何效果 rollup config js let config
  • 为什么 Xcode 3 显示多个编译器错误或每个实际发生的警告

    当我在 Xcode 中构建时 任何错误或警告都会被重复 因此 在 IDE 中 我在状态栏中的图标附近得到两倍的数字 并且在编辑器中显示黄色或红色气泡的地方 在警告 或错误 的行下方有两条警告行 或错误行 发生 其他人也有这个问题 或者知道如
  • 如何将 SVG 元素设置到页面的图标?

    我的页面上有一个 SVG 元素 我想用它作为页面的图标 我如何在 JavaScript 中执行此操作 这样做是令人震惊地令人费解 您可以看到我的解决方案的实际效果here 方法如下所述 通过 ID 或其他方式获取 HTML 元素 留给读者作
  • 如何在 RMarkdown 的代码块中使用 JavaScript?

    灵感来自这个答案 我想在 R 中使用这个数据框 input lt data frame text c a b c page number c 3 5 6 从文本中创建一个列表 链接到不同的页码 该解决方案描述了如何在 Markdown 中使
  • 如何使用 Jest 获取测试文件上的 window.location.pathname?

    我有反应应用程序是由 create react app 使用笑话和酶进行测试制作的 那么我怎样才能得到的值window location pathname在我的测试文件中 这是我的规格 import React from react imp
  • 无法在远程目录中找到或无法访问 Vagrant box - 不兼容的curl版本

    我刚刚下载了 Vagrant 并进行了设置并安装了 virtual box 我只是无法启动我的项目 vagrant up 我有一个流浪文件等等 我能做些什么 vagrant up Bringing machine default up wi
  • 自定义对象到 JSON 然后返回到自定义对象?

    我见过与此非常相似的问题 但我无法确定它们是否得到了明确的回答 也许我有点笨拙 抱歉 我想要拥有自己的对象的便利性 和清晰度 称其为CardboardBox 它不包含代码 只包含数据 我想将其写入数据库并稍后读回 但显然 它是一种类型Obj
  • 图例中的两种线条样式

    我有一个具有两种线条样式 实线和虚线 的图 我希望它们用于相同的图例条目 下面的代码生成典型的图例 包含两个条目 import matplotlib pyplot as plt import numpy as np xy np linspa
  • Java HashMap 如何处理具有相同哈希码的不同对象?

    根据我的理解我认为 两个对象具有相同的哈希码是完全合法的 如果两个对象相等 使用 equals 方法 则它们具有相同的哈希码 如果两个对象不相等 那么它们不能具有相同的哈希码 我对么 现在 如果正确的话 我有以下问题 这HashMap内部使
  • 如何尽可能高效地处理大量并发磁盘写入请求

    假设以下方法被 net 4 应用程序中的不同线程调用数千次 处理这种情况的最佳方法是什么 了解磁盘是这里的瓶颈 但我希望 WriteFile 方法能够快速返回 数据可达几MB 我们是在谈论线程池 TPL 之类的吗 public void W
  • 如何覆盖在 Spark 中读取 DataFrame 的 parquet 文件

    这是我面临的问题的缩影 我遇到了错误 让我尝试在这里重现它 我正在保存一个DataFrame as a parquet 但是当我重新加载时DataFrame from parquet文件并再次保存为parquet 我收到错误 valuesC