SparkSQL中的延迟评估

时间:2016-06-10 11:28:59

标签: apache-spark apache-spark-sql lazy-evaluation

来自Spark Programming Guide

的这段代码
# The result of loading a parquet file is also a DataFrame.
parquetFile = sqlContext.read.parquet("people.parquet")

# Parquet files can also be registered as tables and then used in SQL statements.
parquetFile.registerTempTable("parquetFile");
teenagers = sqlContext.sql("SELECT name FROM parquetFile WHERE age >= 13 AND age <= 19")
teenagers.collect()

执行每一行时,Java堆中究竟发生了什么(Spark内存是如何管理的)?

我特意提出这些问题

  1. sqlContext.read.parquet是懒惰的吗?是否会导致整个镶木地板文件被加载到内存中?
  2. 执行collect操作时,对于要应用的SQL查询,

    一个。是整个镶木地板首先存储为RDD然后处理或

    湾首先处理镶木地板文件,只选择name列,然后存储为RDD,然后根据Spark的age条件进行过滤?

1 个答案:

答案 0 :(得分:-1)

  

sqlContext.read.parquet是否懒惰?

是的,默认情况下,spark中的所有转换都是惰性的。

  

执行collect操作时,要应用SQL查询

     

一个。是整个镶木地板首先存储为RDD然后处理或

     

湾首先处理镶木地板文件,只选择名称列,然后存储为RDD,然后根据Spark的年龄条件进行过滤?

在每个动作上,spark都会生成新的RDD。 Parquet也是一种柱状格式,Parquet阅读器使用下推式滤波器来进一步减少磁盘IO。  下推式滤波器允许在将数据读入Spark之前做出早期数据选择决策。 因此,只有部分文件将被加载到内存中。