DataFrame 分区到单个 Parquet 文件(每个分区)

2024-05-22

我想重新分区/合并我的数据,以便将其保存到每个分区的一个 Parquet 文件中。我还想使用 Spark SQL partitionBy API。所以我可以这样做:

df.coalesce(1)
    .write
    .partitionBy("entity", "year", "month", "day", "status")
    .mode(SaveMode.Append)
    .parquet(s"$location")

我已经对此进行了测试,但它似乎表现不佳。这是因为数据集中只有一个分区需要处理,所有文件的分区、压缩和保存都必须由一个 CPU 核心完成。

我可以在调用合并之前重写它以手动进行分区(例如使用具有不同分区值的过滤器)。

但是有没有更好的方法使用标准 Spark SQL API 来做到这一点?


我遇到了完全相同的问题,我找到了一种使用方法来做到这一点DataFrame.repartition()。使用时出现的问题coalesce(1)是你的并行度下降到 1,并且它在最好的情况下会很慢,在最坏的情况下会出错。增加这个数字也没有帮助——如果你这样做的话coalesce(10)您可以获得更多并行性,但最终每个分区有 10 个文件。

在不使用的情况下为每个分区获取一个文件coalesce(), use repartition()与您希望输出分区所依据的列相同。因此,对于您的情况,请执行以下操作:

import spark.implicits._
df
  .repartition($"entity", $"year", $"month", $"day", $"status")
  .write
  .partitionBy("entity", "year", "month", "day", "status")
  .mode(SaveMode.Append)
  .parquet(s"$location")

完成此操作后,每个输出分区都会获得一个镶木地板文件,而不是多个文件。

我在 Python 中对此进行了测试,但我认为在 Scala 中它应该是相同的。

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

DataFrame 分区到单个 Parquet 文件(每个分区) 的相关文章

随机推荐

  • 使用 .Net 创建 CalDAV 服务

    我想在我的应用程序中创建一个外部用户可以查看的日历 CalDAV 基本上是 WebDAV iCalendar 格式似乎得到了相对广泛的支持 尽管某些客户端 例如 Outlook 不太支持这种格式 不过对我来说完全是新的 我想外部发布事件 我
  • 哪些因素会导致 App Engine 请求中未跟踪时间的高度可变性?

    我刚刚对我的应用程序进行了负载测试 我注意到两个相同请求的延迟存在很大差异 3 秒与 30 秒 当我挖掘痕迹时 我发现了以下内容 Traced ms Untraced ms High latency Request 193 29948 Lo
  • CSS“内容”不起作用

    我想通过 CSS 添加该段落的文本 而不是在 HTML 中 因为它会随着网站的响应能力而变化 现在我无法让它工作 我想知道CSS是否有问题 另外 这是唯一可以做到的方法 使用纯 HTML 和 CSS 还是有另一种方法来定位文本并根据每个分辨
  • Google BigQuery,使用“unnest”函数时丢失了空行

    StandardSQL WITH tableA AS SELECT T001 T002 T003 AS T id 1 5 AS L id UNION ALL SELECT T008 T009 AS T id NULL AS L id SEL
  • 在 iPad 上显示 PDF 文档 - 颜色问题

    我为 iPad 构建了一个 PDF 阅读器 在将预览中的文档与模拟器和设备进行并排比较时 我注意到一些颜色问题 最好的形容就是颜色变得更加浓郁 近距离使用的相似颜色之间的任何差异都会变得更加明显 而所有颜色总体上看起来都更亮 尽管大肆宣传将
  • 在 VBScript 中,如何使用 mid 获取字符串并在“;”处分割字符串

    所以我对 VBScript 比较陌生 并且正在努力获取字符串并删除 拆分它 我目前有 id mid storeline id instr id storeline 1 我本质上想删除 之后的任何代码 例如 ID 12049302 Heigh
  • 转换为父类型——Java

    这实际上是一种验证 有没有any将子对象转换为父类型有好处吗 假设我有两个课程Parent and Child Child正在延伸Parent 有什么区别吗 代码 Parent p new Child and Parent p Parent
  • 在同一进程中混合 .NET 3.5 与 4/4.5 程序集

    我想将基于 NET 3 5 WinForms 的应用程序迁移到最新的 NET 版本 4 5 该应用程序使用当前也基于 NET 3 5 的 外部 组件 可以视为插件 我想知道我们转换时使用哪些运行时 核心库仅应用程序使用 NET 4 5 进行
  • 适合 .Net 开发人员的 Grails/Roo

    我目前正在学习 Grails 和 Roo 绝大多数培训材料都是针对新开发人员或现有 Java 开发人员 有谁知道使用 Net C ASP Net Asp Net MVC 翻译现有开发经验的任何指南 资源或技巧 你做过很多 ASP MVC 吗
  • MySQL SELECT OpenCarts 数据库中的重复行

    只是玩一下 OpenCart DB 看看我是否能学到一些东西 如果我使用以下SELECT结果返回重复的行 SELECT DISTINCT p product id AS pid p model AS modelo SUBSTRING p m
  • 对构建过程依赖于与另一个容器通信的应用程序进行 Docker 化

    我有一个 Ruby on Rails 应用程序 我正在尝试对其进行容器化 以便可以使用 Docker 进行部署 version 3 4 services db image postgres web container name my rai
  • 为什么在概念中使用 std::forward ?

    我正在读有关约束的 cppreference 页面 http en cppreference com w cpp language constraints并注意到这个例子 example constraint from the standa
  • 使用 OData 模型在间隔时间内更改表的单元格

    我有这段代码 我需要我的表格显示前 10 位患者 并在 10 秒后显示接下来的 10 位患者 而无需触摸任何按钮 自动 我正在寻找与此类似的东西 https embed plnkr co ioh85m5OtPmcvPHyl3Bg https
  • React Native Android 构建错误 MainActivity.java:29: 错误: 找不到符号

    我在尝试编译我的 React Native android 应用程序时收到此错误 Android 应用程序无法解析 BuildConfig DEBUG app processDebugJavaRes UP TO DATE app compi
  • 在模板中添加浮点数(django)

    也许我遗漏了一些东西 但我想添加一个浮点数 如下所示 floatnumber add 3 4 过滤器添加我的结果 所以我不想写我的过滤器 但如果这是唯一的方法 我将复制添加过滤器 现在我正在这样做 def addf value arg Ad
  • UrlMapping 和文件扩展名

    我有以下 url 映射 name a a file controller attachment action get 我想像这样使用它
  • 在 JSPdf 中嵌入二进制文件

    我在用着JsPDF https www npmjs com package jspdf将 html 内容导出到下载的 PDF 考虑以下示例 该示例获取一些 HTML 内容并将其输出到下载的 PDF 文件 使用JsPdf import Rea
  • 如何将一行分成多行?

    我有一个 CSV 文件 看起来像这样 Column1 Column2 Column3 John Smith AA AH CA NI PB Reginald Higginsworth AA AH CA NI PB SN ZS 您会注意到其中有
  • 在 tkinter Label 中漂亮地打印数据

    我有以下示例数据 data 1 JohnCena Peter 24 74 2 James Peter 24 70 3 Cena Peter 14 64 14 John Mars 34 174 我想在 tkinter 输出窗口上以漂亮的表格方
  • DataFrame 分区到单个 Parquet 文件(每个分区)

    我想重新分区 合并我的数据 以便将其保存到每个分区的一个 Parquet 文件中 我还想使用 Spark SQL partitionBy API 所以我可以这样做 df coalesce 1 write partitionBy entity