Spark saveAsTable在读写配置单元表时如何工作

问题描述 投票:0回答:1

我有以下代码:

Dataset<Row> rows = sparkContext.sql ("select from hive tables with multiple joins");
rows.saveAsTable(writing to another external table in hive immediately);

1)在上述情况下,当调用saveAsTable()时,是否会将整个数据集加载到内存中?

1.1)如果是,那么当该查询实际上可以返回无法容纳到内存中的大量数据时,我们该如何处理这种情况?

2)当服务器崩溃时,当spark开始执行saveAsTable()以将数据写入外部Hive表时,是否有可能将部分数据写入目标Hive表?

2.2)如果是,我们如何避免将不完整/部分数据持久保存到目标配置单元表中?

apache-spark hadoop hive
1个回答
0
投票

是的,火花会将所有数据存储在内存中,但使用并行进程。但是,当我们写入数据时,它将在写入之前使用驱动程序内存来​​存储数据。因此,请尝试增加驱动程序内存。

所以您有几个选择。如果您在群集中有内存,则可以根据数据大小增加num-cores,num-executors,executor-memory以及driver-memory。

如果无法将所有数据容纳在内存中,请中断数据并以编程方式循环处理。

假设源数据按日期划分,您有10天的处理时间。尝试一次处理1天并写入暂存数据帧。然后根据最终表中的日期创建分区,并在每次循环时覆盖日期。

© www.soinside.com 2019 - 2024. All rights reserved.