Apache spark 从spark中的hdfs读取orc/拼花地板文件

Apache spark 从spark中的hdfs读取orc/拼花地板文件,apache-spark,dataframe,hdfs,Apache Spark,Dataframe,Hdfs,当从hdfs(比如拼花地板或orc文件)将数据加载到spark cluster(独立模式)时,我怀疑它是否会在第一时间读取元数据或整个数据。如果我应用过滤器,它是否将加载整个数据并对其应用过滤器,或者它仅读取选定列,以及是否将整个数据复制到spark,如果是,它将出现在哪里 提前感谢。不确定过滤的确切含义,但一般来说,在访问柱状结构文件(如Parquet或ORC)时,如果选择特定列,则只会将其读取到内存中,而不会读取其他列 特别是,如果您要求使用类似于ds.filter(“…”)的内容,则只读取

当从hdfs(比如拼花地板或orc文件)将数据加载到spark cluster(独立模式)时,我怀疑它是否会在第一时间读取元数据或整个数据。如果我应用过滤器,它是否将加载整个数据并对其应用过滤器,或者它仅读取选定列,以及是否将整个数据复制到spark,如果是,它将出现在哪里


提前感谢。

不确定过滤的确切含义,但一般来说,在访问柱状结构文件(如Parquet或ORC)时,如果选择特定列,则只会将其读取到内存中,而不会读取其他列

特别是,如果您要求使用类似于ds.filter(“…”)的内容,则只读取到内存中回答筛选器的数据的能力称为“谓词下推”。一般来说,它在Spark中可用,但具体取决于您正在尝试做什么。例如,AFAIA,Spark不能对拼花文件中复杂类型的列执行谓词下推

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

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

如果我应用过滤器,它将加载整个数据并对其应用过滤器,还是仅读取


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

谢谢。。。我无法理解spark如何在HDFS中控制选择特定列或过滤文件中的特定记录,因为我在单独的集群中使用spark和HDFS,并且在spark中不使用Thread作为集群管理器选择特定列是拼花地板格式(以及其他类似格式,如ORC)的一项功能。您可以在此处阅读:。Spark在HDFS中没有“控制权”。它从中读/写。。把它想象成一台存储机器。纱线也无关紧要。。它负责资源管理(应用程序、cpu、内存),而不负责存储。这是正确的,但我认为这不是他所问的。。我假设他想对过滤后的数据做些什么,但他担心性能。