Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在AWS Lambda函数上创建拼花地板文件_Java_Scala_Amazon Web Services_Parquet - Fatal编程技术网

Java 在AWS Lambda函数上创建拼花地板文件

Java 在AWS Lambda函数上创建拼花地板文件,java,scala,amazon-web-services,parquet,Java,Scala,Amazon Web Services,Parquet,我在S3上收到一组(1MB)CSV/JSON文件,我想将其转换为拼花地板。我希望能够使用Lambda函数轻松地将这些文件转换为拼花地板 在看过谷歌之后,我没有找到一个没有Hadoop的解决方案 由于这是一个文件转换,我不敢相信没有一个简单的解决方案。有人有一些java/Scala示例代码来完成这个转换吗?< /p> < p>如果你的输入JSON文件不大(64 MB,超过LAMBDA很可能会碰到内存上限),或者有简单的数据类型,或者你想使结构变平,你可以考虑使用,即使路由有点卷曲。 它涉及使用:

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

在看过谷歌之后,我没有找到一个没有Hadoop的解决方案


由于这是一个文件转换,我不敢相信没有一个简单的解决方案。有人有一些java/Scala示例代码来完成这个转换吗?< /p> < p>如果你的输入JSON文件不大(64 MB,超过LAMBDA很可能会碰到内存上限),或者有简单的数据类型,或者你想使结构变平,你可以考虑使用,即使路由有点卷曲。 它涉及使用:

然后将其转换为拼花文件:

pq = pa.parquet.write_table(df, file.pq)
pq = pa.parquet.write_table(df, file.pq)
上面的示例自动推断数据类型。您可以在加载JSON时使用参数
dtype
覆盖它。它唯一的主要缺点是pyarrow只支持
string、bool、float、int、date、time、decimal、list、array

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

考虑使用

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

{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)
pq = pa.parquet.write_table(df, file.pq)

由于拼花地板不是文本的、人类可读的格式,我可以理解为什么这不起作用。理论上,您可以使用AWS EMR和Spark来实现这一点,但我有相同的目标,而且我在模式方面遇到了问题,因为所有行/文件可能没有所有列中的所有可用值,然后Spark可能会以不同的类型读取它们。然后写入拼花将以不同的模式写入,之后您无法同时读取多个拼花文件,因为它们的模式不匹配。我可以理解这是一种二进制文件格式,但它是否需要依赖于Hadoop?最后,我们改变了要求,不再需要Parket(由于不相关的原因)。例如,我们可以使用一些独立的spark应用程序(100MB的JAR,超过了正常的50MB AWS限制)。您使用了什么?现在我们使用GZip JSON。当我们定义最终工具时,我们将决定最终的格式。将有批处理服务、EC2机器、EMR……我使用的是EMR,但使用原始JSON,Spark在大约17分钟内读取约330gb的数据(4x c3.2xlarge实例),并在大约69分钟内将其写入Parquet。然后阅读这个拼花地板只花了一秒钟。可能是因为它不再需要推断模式了。当然,额外的操作需要更多的时间,但对我来说,拼花地板似乎是最好的选择。你有什么包装技巧吗?我似乎无法让pandas和pyarrow低于亚马逊规定的250MB回购规模限制=/