问题描述
我正在努力从 Postgresql 读取数据并在 spark 中处理该数据以执行多个转换,然后创建增量以分隔需要插入/更新/删除的记录。 最初我是在没有指定分区列和上限/下限值的情况下读取单个任务的数据,速度太慢。
然后我指定了具有下限和上限值的分区列,以使用来自 Postgresql 的 spark 并行读取数据。我通过在选项标签中指定 numPartitions 属性的值来读取 6 个线程/任务上的数据。我还将过滤器下推到 Postgresql 以获取过滤条件,我可以在 spark 的解释计划中看到这一点。
数据量巨大,过滤后大约120-130百万。一旦我在 spark 中有数据框,我就会与其他数据框进行多次连接。我看到当一个动作被调用时,从 Postgresql 读取数据的任务会发生多次。我没有缓存数据框,因为它很大,但我想确保我不会多次读取该数据,因为它花费了大量时间。 因此,我决定读取数据并将该数据框内容保存为 S3 存储桶中的镶木地板文件,然后从 S3 存储桶中的镶木地板文件中读取新数据框中的数据。这样做花费更多时间的连接操作任务显着减少,但我遇到了另一个问题,即将数据保存为镶木地板文件几乎需要 40-50 分钟。我将数据重新分区到 48 个分区,然后再将其保存在镶木地板文件中。
我在具有 6 个工作节点的 databricks 集群上运行它。
Driver Node Configuration:
Driver Type = i3.xlarge,30.5 GB Memory,4 cores
Worker Nodes Configuration:
Worker Type = i3.2xlarge,61 GB Memory,8 Cores
我只是想知道我使用的方法是否正确,或者是否有更好的方法以更有效的方式完成相同的任务。 有什么方法可以减少保存镶木地板文件所需的时间?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)