从spark中的hdfs读取orc / parquet文件

时间:2017-03-16 11:42:14

标签: apache-spark dataframe hdfs

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

提前感谢..

2 个答案:

答案 0 :(得分:0)

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

具体来说,如果你要求像ds.filter(" ...")这样的东西,只能读取内存中回答过滤器的数据" Predicate pushdown&# 34 ;.一般来说它可以在Spark中使用,但取决于你想要做什么。例如AFAIA,Spark无法在Parquet文件中对复杂类型列进行谓词下推。

所以我建议如果可能只选择相关列然后过滤。如果您使用复杂类型或在Google上启用SQL检查,则支持谓词下推。

此外,如果文件位于HDFS或其他地方(如S3)并不重要,行为应该相同

答案 1 :(得分:0)

  

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

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