通过Spark SQL进行批量数据迁移

2024-01-01

我目前正在尝试通过 Spark SQL 将非常大的 MySQL 表的内容批量迁移到 parquet 文件中。但这样做时,即使将驱动程序的内存限制设置得更高(我在本地模式下使用 Spark),我也会很快耗尽内存。示例代码:

Dataset<Row> ds = spark.read()
    .format("jdbc")
    .option("url", url)
    .option("driver", "com.mysql.jdbc.Driver")
    .option("dbtable", "bigdatatable")
    .option("user", "root")
    .option("password", "foobar")
    .load();

ds.write().mode(SaveMode.Append).parquet("data/bigdatatable");

Spark 似乎试图将整个表内容读入内存,但效果不太好。那么,通过 Spark SQL 进行批量数据迁移的最佳方法是什么?


在您的解决方案中,Spark 会在开始写入之前将整个表内容读入一个分区。可以避免这种情况的一种方法是对读取部分进行分区,但它需要源数据中的数字连续列:

Dataset<Row> ds = spark.read()
  .format("jdbc")
  .option("url", url)
  .option("driver", "com.mysql.jdbc.Driver")
  .option("dbtable", "bigdatatable")
  .option("user", "root")
  .option("password", "foobar")
  .option("partitionColumn", "NUMERIC_COL")
  .option("lowerBound", "1")
  .option("upperBound", "10000")
  .option("numPartitions", "64")
  .load();

在上面的示例中,数据中必须存在“NUMERIC_COL”列,理想情况下,它应该在 1 到 10000 之间均匀变化。当然,这是很多要求,并且类似的列可能不存在,因此您应该可能会在数据库中创建一个具有类似列的视图,或者将其添加到查询中(请注意,我使用了通用 SQL 语法,您必须适应您的 DBMS):

String query = "(select mod(row_number(), 64) as NUMERIC_COL, * from bigdatatable) as foo"

Dataset<Row> ds = spark.read()
  .format("jdbc")
  .option("url", url)
  .option("driver", "com.mysql.jdbc.Driver")
  .option("dbtable", query)
  .option("user", "root")
  .option("password", "foobar")
  .option("partitionColumn", "NUMERIC_COL")
  .option("lowerBound", "0")
  .option("upperBound", "63")
  .option("numPartitions", "64")
  .load();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过Spark SQL进行批量数据迁移 的相关文章

随机推荐

  • 变量神秘消失? AWS 代码构建

    接下来是我的 buildspec yml build commands IMAGE TAG cat package json grep version head 1 awk F print 2 sed s g echo IMAGE TAG
  • 如何防止 WKWebView 对象崩溃?

    Scenario 我正在用 Swift 构建一个 iOS 应用程序 其中一项功能是将实时视频源作为应用程序背景 视频源源自本地网络上的 Raspberry Pi 使用sudo motion Motion 已成功在默认端口上托管源8081 S
  • 如何调整撬片颜色

    Edit 褪色的灰色仅是 0 9 7 3 及之前版本的问题 此后它已更改为深灰色 Pry 具有很好的着色功能 但是创建或更改对象时返回的值是褪色的灰色 我几乎看不到 u User new gt
  • 在 R 中搜索列表条目的索引

    给定一个 R 列表 我希望找到给定列表条目的索引 例如 对于条目 36 我希望我的输出是 2 另外 我如何使用 lapply 并行执行此类查询 gt list 1 1 7 12 26 29 2 1 11 36 3 1 20 49 4 1 3
  • 为什么 isnan 含糊不清以及如何避免它?

    Since isnan可以是宏 在 C 98 中 或命名空间中定义的函数std 在 C 11 中 这个简单的示例说明了编写在两种情况下都有效的代码的明显 可能是天真的 方法 include
  • iOS Objective C 中的单例不会阻止多个实例

    我知道有几个关于此的主题 但没有一个回答我的问题 我已经像这样实现了我的单例类 意识到有关单例的争议 MyClass sharedInstance static MyClass sharedInstance nil static dispa
  • OpenIdDict 不从 .Net Core API 返回令牌

    我有一个 Net Core API 项目 我在其中使用 OpenIDDict 进行身份验证 我在那里提到官方存储库 https github com openiddict openiddict samples blob dev sample
  • 如何跟踪页面上的链接被点击的位置?

    我正在接管一个具有三列布局的网站的开发 左侧 菜单 内容横幅 主要 内容 右侧 内容横幅 他们 网站所有者 使用内容横幅来宣传重要内容 我试图让他们明白 根据人类阅读模式的 P 形状 位于右下角 右栏 底部 的项目实际上对访问者来说是不可见
  • 手动输入日期时 md-datepicker 显示错误

    我正在使用 md datepicker 当我手动输入日期时 它显示无效日期 但如果我从此控件中选择日期 则它会被验证 为此我使用了以下代码
  • 在 PHP Foreach 循环之外使用变量

    我试图在 foreach 循环之外输出用户名和用户电子邮件 我正在尝试向特定用户角色内的所有 WordPress 用户发送电子邮件 这是我的代码 Get users and their roles user args array role
  • Windows Phone 7 通过 wifi 接收 UDP 数据包(广播或单播)

    我已经看了好几天有关 Windows Phone 7 的各个论坛 但没有一个给我明确的答案 到目前为止 我还无法接收从通过 wifi 连接到 Windows Phone 7 设备 在模拟器上运行 的计算机发送的 UDP 数据包 既不是广播也
  • Uploadify:使用 scriptData 将表单的 ID 作为参数传递

    我需要能够使用 Uploadify 在一页上有多个上传输入 可能有数百个 上传 PHP 文件将根据用于提交文件的输入按钮的 ID 重命名上传的文件 因此它将需要该 ID 由于我将在一个页面上有数百个上传按钮 因此我想创建一个通用实例 因此我
  • 带有主查询数据变量的 MySQL 子查询

    好的 这里需要一位 MySQL 专家 我正在尝试编写一个查询 当有人对您之前评论过的项目发表评论时 该查询将充当通知系统 drinkComment 表非常简单 commentID userID drinkID datetime commen
  • Flex/bison,错误:未声明

    你好 我有一个问题 下面的程序返回一个错误 error Undeclared first use in function 为什么会出现这个错误所有令牌都被声明了 但是这个错误来了 任何人都可以帮助我 这里是 lex 和 yac 文件 谢谢
  • TortoiseHG 和 TortoiseSVN 一起玩得好吗?

    我先安装了TSVN 并使用了很长时间 然后我安装 T HG 当我右键单击时 我没有看到任何 TortoiseHG 有人有同样的问题吗 所有 T SVN 覆盖仍然存在 从版本 0 8 2009 07 01 发布 开始 TortoiseHg 支
  • 在.NET 中连接来自不同源数据库的两个数据表?

    如何在 NET 中连接来自不同源数据库的两个数据表 理想情况下 我可以手动创建两个查询并简单地连接到单个字段 在这种情况下 链接服务器和计划导入不是一个选项 我已经研究了数据关系对象 但是 如果我错了 请纠正我 这只适用于父子关系 我也遇到
  • WinDbg 在 MS 符号服务器上找不到 ntdll 的符号

    我正在尝试调试可执行文件 notepad exe 来自 Windows 10 发行版 并且需要来自 Microsoft 符号服务器的符号 ntdll pdb 但调试器返回错误 指出找不到指定的文件 0 000 gt reload Reloa
  • 我可以在 Schema.org 的一个项目范围中使用多个项目类型吗? [复制]

    这个问题在这里已经有答案了 我想知道是否可以在一个项目范围内使用多个项目类型 例如我现在有这个 div class wrapper p p p p div 当我在 Google 的 Web 开发人员工具中进行结构化数据测试时 它仅选取
  • Trirand jqGrid 未显示;类型错误:$(...).jqGrid 不是函数

    网格不显示 Firefox 控制台显示 类型错误 jqGrid 不是函数 ASP NET MVC 5 2 2 剃刀 jQuery 2 1 1 特兰德 jqGrid 4 6 0 我检查过其他类似的问题 每次问题看起来都不一样 要么是语法问题
  • 通过Spark SQL进行批量数据迁移

    我目前正在尝试通过 Spark SQL 将非常大的 MySQL 表的内容批量迁移到 parquet 文件中 但这样做时 即使将驱动程序的内存限制设置得更高 我在本地模式下使用 Spark 我也会很快耗尽内存 示例代码 Dataset