【问题标题】:Reading orc/parquet files from hdfs in spark在 spark 中从 hdfs 读取 orc/parquet 文件
【发布时间】:2017-08-07 13:42:41
【问题描述】:

我怀疑从 hdfs 将数据加载到 spark 集群(独立模式)时说 parquet 或 orc 文件是否会在第一次读取元数据或整个数据。如果我应用过滤器,它是否会加载整个数据并对其应用过滤器,或者它只读取选定的列以及是否将整个数据复制到 spark 中,如果是,它将出现在哪里...

提前谢谢..

【问题讨论】:

    标签: apache-spark dataframe hdfs


    【解决方案1】:

    不确定您所说的过滤究竟是什么意思,但一般来说,在访问 Parquet 或 ORC 等柱状结构文件时,如果您选择特定列,您只会将它们读入内存,而不会将其他列读入。

    特别是如果您要求类似 ds.filter("...") 的内容,则仅将响应过滤器的数据读取到内存的能力称为“谓词下推”。一般来说,它在 Spark 中可用,但具体取决于您要执行的操作。例如 AFAIA,Spark 无法对 Parquet 文件中的复杂类型列执行谓词下推。

    因此,如果可能,我建议仅选择相关列然后进行过滤。如果您使用复杂类型或在 Google 上触发 SQL 检查是否支持谓词下推。

    此外,无论文件是在 HDFS 上还是在 S3 等其他地方,行为都应该相同

    【讨论】:

    • 谢谢...我无法理解 spark 如何在 HDFS 中控制选择特定列或过滤文件中的特定记录,因为我在单独的集群中使用 spark 和 HDFS 而我没有使用 YARN作为 Spark 中的集群管理器
    • 选择特定列是 Parquet 格式(以及其他类似格式,如 ORC)的一个特性。你可以在这里阅读:svds.com/dataformats。 Spark 在 HDFS 中没有“控制权”。它从中读/写..把它想象成存储机器。 Yarn 也无关紧要。它负责资源管理(应用程序、cpu、内存),不处理存储。
    【解决方案2】:

    如果我应用过滤器,它是否会加载整个数据并对其应用过滤器,或者它只读取......

    当过滤器转换完成时,Spark 不会将数据加载到内存中,它不会从文件中加载数据,直到对其执行任何操作。这是因为惰性评估。

    【讨论】:

    • 这是正确的,但我认为这不是他问的问题。我认为他想对过滤后的数据做一些事情,但担心性能。
    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 2020-10-28
    • 2015-08-27
    • 2021-06-18
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多