【发布时间】:2017-08-07 13:42:41
【问题描述】:
我怀疑从 hdfs 将数据加载到 spark 集群(独立模式)时说 parquet 或 orc 文件是否会在第一次读取元数据或整个数据。如果我应用过滤器,它是否会加载整个数据并对其应用过滤器,或者它只读取选定的列以及是否将整个数据复制到 spark 中,如果是,它将出现在哪里...
提前谢谢..
【问题讨论】:
标签: apache-spark dataframe hdfs
我怀疑从 hdfs 将数据加载到 spark 集群(独立模式)时说 parquet 或 orc 文件是否会在第一次读取元数据或整个数据。如果我应用过滤器,它是否会加载整个数据并对其应用过滤器,或者它只读取选定的列以及是否将整个数据复制到 spark 中,如果是,它将出现在哪里...
提前谢谢..
【问题讨论】:
标签: apache-spark dataframe hdfs
不确定您所说的过滤究竟是什么意思,但一般来说,在访问 Parquet 或 ORC 等柱状结构文件时,如果您选择特定列,您只会将它们读入内存,而不会将其他列读入。
特别是如果您要求类似 ds.filter("...") 的内容,则仅将响应过滤器的数据读取到内存的能力称为“谓词下推”。一般来说,它在 Spark 中可用,但具体取决于您要执行的操作。例如 AFAIA,Spark 无法对 Parquet 文件中的复杂类型列执行谓词下推。
因此,如果可能,我建议仅选择相关列然后进行过滤。如果您使用复杂类型或在 Google 上触发 SQL 检查是否支持谓词下推。
此外,无论文件是在 HDFS 上还是在 S3 等其他地方,行为都应该相同
【讨论】:
如果我应用过滤器,它是否会加载整个数据并对其应用过滤器,或者它只读取......
当过滤器转换完成时,Spark 不会将数据加载到内存中,它不会从文件中加载数据,直到对其执行任何操作。这是因为惰性评估。
【讨论】: