首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >org.apache.parquet.io.InputFile的S3实现?

org.apache.parquet.io.InputFile的S3实现?
EN

Stack Overflow用户
提问于 2019-07-18 23:42:33
回答 1查看 1.5K关注 0票数 2

我正在尝试编写一个基于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类正常工作,因为它看起来很干净。

感谢你的任何想法。

EN

Stack Overflow用户

发布于 2019-07-19 00:22:55

Hadoop使用它自己的文件系统抽象层,该抽象层有一个s3实现(https://hadoop.apache.org/docs/current/hadoop-aws/tools/hadoop-aws/index.html#S3A)。

设置应该看起来像下面这样(java,但在scala上也应该一样):

代码语言:javascript
运行
复制
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))
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57098246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档