Pow*_*ers 4 amazon-s3 apache-spark parquet
您可以将S3 Select 与 Amazon EMR 上的 Spark以及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()
Run Code Online (Sandbox Code Playgroud)
如果数据存储在 Parquet 数据湖中并peopleDF.select("first_name").distinct().count()运行,那么 S3 只会将列中的数据传输first_name到 ec2 集群。Parquet 是一种柱状文件格式,这是其主要优点之一。
因此,根据我的理解,S3 Select 无助于加快 Parquet 数据湖的分析速度,因为列式文件格式提供了开箱即用的 S3 Select 优化。
我不确定,因为一位同事确信我错了,而且S3 Select 支持 Parquet 文件格式。您能否确认柱状文件格式提供了 S3 Select 提供的主要优化?
这是个有趣的问题。尽管我已经在 hadoop-aws 模块中完成了 S3 选择绑定代码,但我没有任何实数。Amazon EMR 和 databricks 都有一些价值。
对于 CSV IO 是的,S3 Select 将加速源数据的积极过滤,例如许多 GB 的数据,但返回的数据不多。为什么?尽管读取速度较慢,但您可以节省虚拟机的有限带宽。
但对于 Parquet,工作人员将一个大文件分割成多个部分,并在它们之间安排工作(假设使用像 snappy 这样的可分割压缩格式),因此 > 1 个工作人员可以处理同一个文件。他们只读取一小部分数据(==带宽收益较少),但他们确实在该文件中查找(==需要优化查找策略,否则中止和重新打开 HTTP 连接的成本)
如果集群中有足够的容量并且您已经调整了 s3 客户端设置(对于 s3a,这意味着:查找策略、线程池大小、http 池大小),我不相信 S3 集群中的 Parquet 读取可以击败 Spark 集群也为了性能。
就像我说的:我不确定。欢迎提供数字。
| 归档时间: |
|
| 查看次数: |
4328 次 |
| 最近记录: |