我正在尝试编写一个基于Scala的AWS Lambda来读取基于S3的快速压缩的Parquet文件。该过程将它们写回分区的JSON文件中。
我一直在尝试使用org.apache.parquet.hadoop.ParquetFileReader类来读取文件...未被弃用的方法似乎是将org.apache.parquet.io.InputFile接口的实现传递给它。有一个是针对Hadoop (HadoopInputFile)的。但我找不到给S3的。我还尝试了这个类的一些不推荐使用的方法,但也不能让它们与S3一起工作。
有什么解决方案来解决这个难题吗?
以防有人感兴趣..。为什么我要在Scala中这样做?好吧..。我想不出另一种方法来做这件事。Python的Parquet实现(pyarrow和list Parquet)似乎都很难处理复杂的基于列表/结构的模式。
此外,我还看到一些基于AvroParquetReader的代码(Read parquet data from AWS s3 bucket)可能是一种不同的解决方案,但如果没有已知的模式,我无法让它们工作。但也许我在这方面漏掉了什么。
我真的很想让ParquetFileReader类正常工作,因为它看起来很干净。
感谢你的任何想法。
发布于 2019-07-19 00:22:55
Hadoop使用它自己的文件系统抽象层,该抽象层有一个s3实现(https://hadoop.apache.org/docs/current/hadoop-aws/tools/hadoop-aws/index.html#S3A)。
设置应该看起来像下面这样(java,但在scala上也应该一样):
Configuration conf = new Configuration();
conf.set(Constants.ENDPOINT, "https://s3.eu-central-1.amazonaws.com/");
conf.set(Constants.AWS_CREDENTIALS_PROVIDER,
DefaultAWSCredentialsProviderChain.class.getName());
// maybe additional configuration properties depending on the credential provider
URI uri = URI.create("s3a://bucketname/path");
org.apache.hadoop.fs.Path path = new Path(uri);
ParquetFileReader pfr = ParquetFileReader.open(HadoopInputFile.fromPath(path, conf))
https://stackoverflow.com/questions/57098246
复制相似问题