AWS Glue Spark作业-使用CatalogSource时如何对S3输入文件进行分组?

时间:2019-06-20 20:48:56

标签: scala amazon-web-services apache-spark amazon-s3 glue

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”时应该可以使用)。

1 个答案:

答案 0 :(得分:0)

根据AWS支持,可以通过AWS控制台在Glue表级别上直接设置所有属性。

a. Key= groupFiles , value= inPartitio b. Key=groupSize, value=1048576 c. Key=recurse, value=True