繁体   English   中英

S3 Select 会加速 Spark 对 Parquet 文件的分析吗?

[英]Would S3 Select speed up Spark analyses on Parquet files?

您可以将S3 Select 与 Amazon EMR 上的 SparkDatabricks 一起使用,但仅限于 CSV 和 JSON 文件。 我猜 S3 Select 没有为柱状文件格式提供,因为它不会有太大帮助。

假设我们有一个包含first_namelast_namecountry列的人员的数据湖。

如果数据存储为 CSV 文件并且您运行类似peopleDF.select("first_name").distinct().count()的查询,则 S3 会将所有列的所有数据传输到 ec2 集群以运行计算. 这真的很低效,因为我们不需要所有的last_namecountry数据来运行这个查询。

如果数据存储为 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 支持 Parquet 文件格式 您能否确认分栏文件格式提供了 S3 Select 提供的主要优化?

这是个有趣的问题。 我没有任何实数,尽管我已经在 hadoop-aws 模块中完成了 S3 选择绑定代码。 Amazon EMR 和数据块一样具有一些价值。

对于 CSV IO 是的,S3 Select 将在对源数据进行积极过滤的情况下加速,例如许多 GB 的数据,但返回的数据不多。 为什么? 尽管读取速度较慢,但您可以节省 VM 的有限带宽。

但是对于 Parquet,工作人员将一个大文件拆分成多个部分并安排它们之间的工作(假设使用像 snappy 这样的可拆分压缩格式),因此 > 1 个工作人员可以处理同一个文件。 而且他们只读取了一小部分数据(==带宽收益较少),但他们确实在该文件中四处寻找(==需要优化寻找策略,否则中止和重新打开 HTTP 连接的成本)

如果集群中有足够的容量并且您已经调整了 s3 客户端设置(对于 s3a 这意味着:查找策略、线程池大小、http 池大小),我不相信 S3 集群中的 Parquet 读取可以击败 spark 集群也是为了表现。

就像我说的:我不确定。 欢迎提供数字。

在 parquet [1] 上遇到了用于 s3 select 的这个 spark 包

[1] https://github.com/minio/spark-select

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM