gpt4 book ai didi

apache-spark - spark是否将整个hive表带入内存

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

我正在学习 Apache Spark 的工作原理并有一些基本的疑问。假设我正在运行一个连接到 Hive 表的 Spark 应用程序。我的 hive 表如下:

<表类="s-表"><头>姓名年龄标记<正文>一个50100B50100C75200

当我运行以下代码片段时,哪些行和列将在执行过程中加载到内存中?行/列的过滤是不是要等整个表加载到内存后才做?

1. spark_session.sql("SELECT name, age from table").collect()
2. spark_session.sql("SELECT * from table WHERE age=50").collect()
3. spark_session.sql("SELECT * from table").select("name", "age").collect()
4. spark_session.sql("SELECT * from table").filter(df.age = 50).collect()

最佳答案

如果数据源支持谓词下推,则 spark 在过滤数据时不会将整个数据加载到内存。

让我们检查一下以 parquet 作为文件格式的 hive 表的 spark 计划:

>>> df = spark.createDataFrame([('A', 25, 100),('B', 30, 100)], ['name', 'age', 'marks'])
>>> df.write.saveAsTable('table')
>>> spark.sql('select * from table where age=25').explain(True)

== Physical Plan ==
*(1) Filter (isnotnull(age#1389L) AND (age#1389L = 25))
+- *(1) ColumnarToRow
+- FileScan parquet default.table[name#1388,age#1389L,marks#1390L] Batched: true, DataFilters: [isnotnull(age#1389L), (age#1389L = 25)],
Format: Parquet, Location: InMemoryFileIndex[file:/Users/mohan/spark-warehouse/table],
PartitionFilters: [], PushedFilters: [IsNotNull(age), EqualTo(age,25)], ReadSchema: struct<name:string,age:bigint,marks:bigint>

您可以通过查看 PushedFilters: [IsNotNull(age), EqualTo(age,25)]

来验证过滤器是否已推送到底层存储

关于apache-spark - spark是否将整个hive表带入内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69195365/

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