在AWS Lambda函数上创建镶木地板文件

时间:2017-01-06 10:53:03

标签: java scala amazon-web-services parquet

我在S3上收到一组(1 Mb)CSV / JSON文件,我想将其转换为Parquet。我希望能够使用Lambda函数轻松地将这些文件转换为Parquet。

在浏览Google之后,我没有找到解决方案而没有某种Hadoop。

由于这是一个文件转换,我无法相信没有一个简单的解决方案。有人有一些Java / Scala示例代码来进行此转换吗?

2 个答案:

答案 0 :(得分:1)

如果输入的JSON文件不大(<64 MB,超出的lambda可能会达到内存上限)并且具有简单的数据类型,或者您愿意展平结构,则可以考虑使用pyarrow ,即使路线稍微有些曲折。

它涉及使用Pandas

df = pd.read_json(file.json)

随后将其转换为镶木地板文件:

pq = pa.parquet.write_table(df, file.pq)

以上示例自动推断数据类型。您可以在加载JSON时使用参数dtype覆盖它。唯一的主要缺点是pyarrow仅支持string, bool, float, int, date, time, decimal, list, array

更新(更通用的解决方案)

请考虑使用json2parquet

但是,如果输入数据具有嵌套字典,则首先需要将其展平,即convert:

{a: {b: {c: d}}} to {a.b.c: d}

然后,需要使用json2parquet将这些数据作为pyarrow批摄取:

pa_batch = j2p.ingest_data(data)

现在批处理可以作为PyArrow数据框加载:

df = pa.Table.from_batches([pa_batch])

并输出到实木复合地板文件中

pq = pa.parquet.write_table(df, file.pq)

答案 1 :(得分:0)

我认为没有办法使用AWS Lambda转换为镶木地板格式。但是,其中一种简单的方法是使用Glue Crawler从S3中取出它,然后将ETL作业转换为镶木地板并存储在您需要的任何地方。