【发布时间】:2019-04-29 22:51:22
【问题描述】:
您可以使用 S3 Select with Spark on Amazon EMR 和 with Databricks,但仅适用于 CSV 和 JSON 文件。我猜 S3 Select 不提供用于列式文件格式,因为它没有太大帮助。
假设我们有一个包含first_name、last_name 和country 列的人员数据湖。
如果数据存储为 CSV 文件,并且您运行类似 peopleDF.select("first_name").distinct().count() 的查询,则 S3 会将所有列的所有数据传输到 ec2 集群以运行计算。这确实是低效的,因为我们不需要所有的 last_name 和 country 数据来运行这个查询。
如果数据存储为 CSV 文件,并且您使用 S3 select 运行查询,则 S3 将仅传输 first_name 列中的数据以运行查询。
spark
.read
.format("s3select")
.schema(...)
.options(...)
.load("s3://bucket/filename")
.select("first_name")
.distinct()
.count()
如果数据存储在 Parquet 数据湖中并运行 peopleDF.select("first_name").distinct().count(),则 S3 只会将 first_name 列中的数据传输到 ec2 集群。 Parquet 是一种柱状文件格式,这是主要优点之一。
因此,根据我的理解,S3 Select 无助于加快 Parquet 数据湖的分析,因为列文件格式提供了开箱即用的 S3 Select 优化。
我不确定,因为同事确定我错了,因为S3 Select supports the Parquet file format。您能否确认列文件格式提供了 S3 Select 提供的主要优化?
【问题讨论】:
标签: apache-spark amazon-s3 parquet