Apache spark SparkSQL中的惰性计算

Apache spark SparkSQL中的惰性计算,apache-spark,apache-spark-sql,lazy-evaluation,Apache Spark,Apache Spark Sql,Lazy Evaluation,在这段代码中 Java堆中到底发生了什么?执行每一行时如何管理Spark内存 我特别有这些问题 sqlContext.read.parquet是否懒惰?它是否会导致整个拼花地板文件加载到内存中? 执行collect操作时,对于要应用的SQL查询 a。整个拼花地板是否先存储为RDD,然后再进行处理 b。是否先处理拼花地板文件以仅选择“名称”列,然后存储为RDD,然后根据Spark的年龄条件进行过滤 sqlContext.read.parquet是否懒惰 是的,默认情况下,spark中的所有转换都是

在这段代码中

Java堆中到底发生了什么?执行每一行时如何管理Spark内存

我特别有这些问题

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

a。整个拼花地板是否先存储为RDD,然后再进行处理

b。是否先处理拼花地板文件以仅选择“名称”列,然后存储为RDD,然后根据Spark的年龄条件进行过滤

sqlContext.read.parquet是否懒惰

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

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

a。整个拼花地板是否先存储为RDD,然后再进行处理

b。是否先处理拼花地板文件以仅选择“名称”列,然后存储为RDD,然后根据Spark的年龄条件进行过滤

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

DataFrameReader操作通常不会延迟。它们需要元数据或数据访问,具体取决于源。请为您的评论提供引用。引用位于DataFrame的代码源中@atulgupta@eliasah就在这里。最好检查您使用的特定输入源的代码。如果您喜欢经验方法,只需使用RDD[String]检查SQLContext.read.json的默认行为。详细信息取决于上下文和参数,但在更糟糕的情况下,DataFrameReader.load可能需要完全数据扫描。但实木地板并非如此。
# 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()