AWS Glue Spark API支持将多个较小的输入文件分组在一起 ({{3}})可以减少任务和分区。
但是,当使用通过// mergeFrom reads all the cookies from r and stores them in the Jar.
func (j *Jar) mergeFrom(r io.Reader) error {
decoder := json.NewDecoder(r)
// Cope with old cookiejar format by just discarding
// cookies, but still return an error if it's invalid JSON.
var data json.RawMessage
if err := decoder.Decode(&data); err != nil {
if err == io.EOF {
// Empty file.
return nil
}
return err
}
var entries []entry
if err := json.Unmarshal(data, &entries); err != nil {
log.Printf("warning: discarding cookies in invalid format (error: %v)", err)
return nil
}
j.merge(entries)
return nil
}
的数据目录源和一个表(该表又由S3中存储的文件支持)时,我们找不到将上述分组参数传递给s3源的任何可能性。
一些背景信息: 我们的ETL作业读取许多小文件,处理包含的记录,并将它们写回到S3,同时保留原始文件夹结构。与源相比,这些输出记录的数量应该更大或更小。
我们认为,如上所述按组读取文件时可以实现此目的。实现此目的的另一种方法基本上是重新分区为(1),但这效率极低。
我们错过了什么吗?有人知道如何有效地做到这一点吗?理想情况下,我们可以指定近似值。输出文件的大小(在我们正确理解规范的情况下,在设置“ groupSize”:“ 10000”时应该可以使用)。
答案 0 :(得分:0)
根据AWS支持,可以通过AWS控制台在Glue表级别上直接设置所有属性。
a. Key= groupFiles , value= inPartitio
b. Key=groupSize, value=1048576
c. Key=recurse, value=True