如何使用pyspark/hive解决5GB s3复制限制的问题



我正在尝试针对EMR集群运行spark-sql作业。我的创建表操作包含许多列,但我得到了一个s3错误:

The specified copy source is larger than the maximum allowable size for a copy source: 5368709120

是否可以设置hive/spark/pyspark设置,使临时文件不会达到写入s3的5GB阈值?

这是有效的:(只有1列(

create table as select b.column1 from table a left outer join verysmalltable b on ...

这不起作用:(多列(

create table as select b.column1, a.* from table a left outer join verysmalltable b on ...

在这两种情况下,select语句单独起作用。(见下文(

工作:

select b.column1 from table a left outer join verysmalltable b on ...
select b.column1, a.* from table a left outer join verysmalltable b on ...

我想知道是否与记忆有关,但不确定。如果是内存错误,我想我会在遇到复制错误之前遇到内存错误(也假设如果是内存问题,带有多列的select语句将不起作用(

只有在调用createtable时,我才会遇到s3错误。我不能不使用s3来保存表,我想知道是否有办法解决这个问题。5GB的限制似乎是一个硬性限制。如果有人知道我能在蜂箱/火花端做些什么,我将不胜感激。

我想知道spark-defaults.conf文件中是否可以包含一个特定的设置来限制临时文件的大小。

额外信息:错误发生后,临时文件为4.5GB(_T(。

在过去的几个月里,s3使用参数的方式发生了变化

fs.s3a.multipart.threshold

此设置需要低于5G才能使特定大小的查询工作。以前,为了保存更大的文件,我设置了大量的此设置,但显然这种行为已经改变了。

此设置的默认值为2GB。在spark文档中,有多个基于所使用的hadoop版本的不同定义。