首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spark和JDBC:遍历大型表并写入hdfs

Spark和JDBC:遍历大型表并写入hdfs
EN

Stack Overflow用户
提问于 2017-06-22 11:07:57
回答 1查看 1.5K关注 0票数 1

什么是最有效的内存方式来复制大型关系表的内容,然后用parquet格式写入分区的Hive表(没有sqoop)。我有一个基本的spark应用程序,我已经用spark的jdbc做了一些其他的调优,但是关系表中的数据仍然是0.5TB和20亿条记录,所以我虽然可以懒惰地加载完整的表,但我正在努力弄清楚如何根据日期有效地分区,并保存到hdfs中,而不会遇到内存问题。由于spark中的jdbc load()将将所有内容加载到内存中,所以我考虑循环遍历数据库查询中的日期,但仍然不知道如何确保内存不会耗尽。

EN

回答 1

Stack Overflow用户

发布于 2017-06-22 12:00:16

如果需要使用Spark,可以向应用程序date参数中添加按日期筛选表的内容,并为每个日期循环运行Spark应用程序。您可以对此循环使用bash或其他脚本语言。

这可能看起来是:

  • 日期中的预测日期
    • 使用spark-submit参数对应用程序进行date
    • spark.read.jdbc读取DB表
    • 基于datefilter滤波方法
    • df.write.parquet("hdfs://path")将结果写入HDFS

另一种选择是使用不同的技术,例如使用JDBC和DB游标实现Scala应用程序来迭代行并将结果保存到HDFS。这更复杂,因为您需要解决与编写Parquet格式和使用Scala保存HDFS有关的问题。如果您愿意,我可以提供Scala代码,负责编写Parquet格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44697621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档