gpt4 book ai didi

apache-spark - 针对基于CSV的Spark DataFrame的查询比基于Parquet的查询快吗?

转载 作者:行者123 更新时间:2023-12-04 17:07:51 26 4
gpt4 key购买 nike

我必须使用Spark将HDFS的CSV文件加载到DataFrame中。我想知道从CSV文件支持的DataFrame到由 Parquet 文件支持的DataFrame是否有“性能”的提高(查询速度)?

通常,我将如下所示的CSV文件加载到数据框中。

val df1 = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.load("hdfs://box/path/to/file.csv")

另一方面,加载 Parquet 文件(假设我已经解析了CSV文件,创建了架构并将其保存到HDFS)如下所示。
val df2 = sqlContext.read.parquet("hdfs://box/path/to/file.parquet")

现在,我想知道是否会影响和/或改变以下查询时间之类的操作。
  • df1.where(“col1 ='some1'”)。count()
  • df1.where(“col1 ='some1'and col2 ='some2'”)。count()

  • 我想知道是否有人知道 Parquet 是否有谓词推送功能?

    在我看来, Parquet 似乎有点像倒排索引,而且对于基于 Parquet 的数据帧,简单的计数过滤器将比CSV上的过滤器更快。至于CSV支持的数据帧,我可以想象每次过滤项目时都必须进行完整的数据集扫描。

    感谢您对CSV和 Parquet 支持的数据帧查询性能进行任何澄清。同样,也欢迎任何有助于加快数据帧中查询计数的文件格式。

    最佳答案

    CSV是面向行的格式,而Parquet是面向列的格式。
    通常,面向行的格式对于必须访问大多数列或仅读取一部分行的查询而言,效率更高。另一方面,面向列的格式通常对于需要读取大多数行但只需要访问一部分列的查询而言效率更高。分析查询通常属于后一类,而事务查询通常属于第一类。
    此外,CSV是一种基于文本的格式,无法像二进制格式一样有效地进行解析。这会使CSV变得更慢。另一方面,典型的面向列的格式不仅是二进制的,而且还允许更有效的压缩,从而导致较小的磁盘使用量和更快的访问速度。我建议阅读The Design and Implementation of Modern Column-Oriented Database Systems的“简介”部分。
    由于Hadoop生态系统用于分析查询,因此对于Hadoop应用程序而言,Parquet通常是性能优于CSV的更好选择。

    关于apache-spark - 针对基于CSV的Spark DataFrame的查询比基于Parquet的查询快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39541315/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com