当前位置: 首页 > 知识库问答 >
问题:

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

云季同
2023-03-14

您可以在Amazon EMR上使用Spark和Databricks来使用S3选择,但只能用于CSV和JSON文件。我猜S3选择不提供纵栏文件格式,因为它不会有多大帮助。

假设我们有一个包含< code>first_name 、< code>last_name和< code>country列的人员数据湖。

如果数据存储为CSV文件,并且您运行类似于<code>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数据池中,并且<code>peopleDF.select(“first_name”).distinct()。如果运行count(),则S3将只将first_name列中的数据传输到ec2集群。拼花是一种柱状文件格式,这是其主要优点之一。

因此,根据我的理解,S3选择不会有助于加快对拼花数据湖的html" target="_blank">分析,因为列文件格式提供了开箱即用的S3选择优化。

我不确定,因为一位同事肯定我错了,还因为S3选择支持拼花文件格式。您能否确认分栏式文件格式提供了S3精选提供的主要优化功能?

共有2个答案

方轩昂
2023-03-14

在拼花地板上看到了s3 select的spark包[1]

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

夏祯
2023-03-14

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

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

然而,对于拼花木地板,工作人员将一个大文件分成几个部分,并在它们之间安排工作(假设使用了像snappy这样的可拆分压缩格式),所以

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

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

 类似资料:
  • 我试图使用R将多个parquet文件加载到一个Spark表中。附加的代码显示了我是如何做到这一点的。

  • Parquet是一种柱状(columnar)格式,可以被许多其它的数据处理系统支持。Spark SQL提供支持读和写Parquet文件的功能,这些文件可以自动地保留原始数据的模式。 加载数据 // sqlContext from the previous example is used in this example. // createSchemaRDD is used to implicitl

  • 我正在使用Dropwizard web服务来访问许多parquet文件,我需要使用“真正的”sql(字符串)而不是spark DDL(我已经尝试过了,但没有满足我的需要)。我在独立模式下使用spark从eclipse启动服务。Spark版本是1.4.1。 问题是spark不能解析普通SQL中的parquet引用,如下所示:(我在./bro/conn.parquet中启动web服务的文件夹中有一个测

  • 有什么方法可以在现有的parquet文件中追加一个新列吗?

  • 步骤3我通过for循环加载每个分区,执行聚合,并以追加模式将其保存为文件夹,这样我就有9个模块作为文件夹:、等。它们不按模块分区,只是保存为文件夹。由于我的默认spark numpartitions是,每个模块文件夹都有文件,因此总共有文件 步骤4到目前为止还不错,但是我需要按把它分区回来。因此,我循环遍历每个分区,并将文件保存为一个没有任何分区的parquet文件。这导致总共有文件。我不知道这是

  • HDFS设置: 未设置。 不返回任何内容。 我试图避免自己在加载后不得不在应用程序中重新分区。 是否有一种方法可以强制Spark用存储在HDFS上的相同数量的分区加载parquet文件?