我在S3上收到一组(1 Mb)CSV / JSON文件,我想将其转换为Parquet。我希望能够使用Lambda函数轻松地将这些文件转换为Parquet。
在浏览Google之后,我没有找到解决方案而没有某种Hadoop。
由于这是一个文件转换,我无法相信没有一个简单的解决方案。有人有一些Java / Scala示例代码来进行此转换吗?
答案 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作业转换为镶木地板并存储在您需要的任何地方。