gpt4 book ai didi

apache-spark - SparkSQL 中的惰性求值

转载 作者:行者123 更新时间:2023-12-05 08:09:25 28 4
gpt4 key购买 nike

这段代码来自 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 是懒惰的吗?它会导致整个 parquet 文件加载到内存中吗?
  2. 执行收集操作时,对于要应用的 SQL 查询,

    一个。是整个parquet先存储为一个RDD再处理还是

    parquet 文件是先处理只选择 name 列,然后存储为 RDD,然后由 Spark 根据 age 条件过滤吗?

最佳答案

Is sqlContext.read.parquet lazy?

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

When the collect action is executed, for the SQL query to be applied

a. is the entire parquet first stored as an RDD and then processed or

b. is the parquet file processed first to select only the name column, then stored as an RDD and then filtered based on the age condition by Spark?

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

关于apache-spark - SparkSQL 中的惰性求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747122/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com