pyspark 为什么我的峰值执行内存在spark 0中?

yrdbyhpb  于 2023-06-21  发布在  Spark
关注(0)|答案(1)|浏览(126)

数据文件(CSV)说明:

  • 磁盘上12.1GiB
  • 串行化内存- 1.9 GiB

我运行以下代码:

###imports
import pyspark
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.window import Window as w
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

##start session without off-heap
spark = SparkSession.builder.\
config("spark.dynamicAllocation.enabled",False).\
config("spark.executor.cores","2").\
config("spark.executor.instances","1").\
config("spark.executor.memory","500m").\
config("spark.sql.adaptive.enabled", False).\
config("spark.sql.files.maxPartitionBytes","13g").\
getOrCreate()

####read in a 1.9 GiB Serialized CSV
df_covid = spark.read.csv("gs://xxxxxxxxxxxx.appspot.com/spark_datasets/covid13g.csv",
                          header=True, inferSchema=False)
df_covid.cache()

######check the number of partitions
df_covid.rdd.getNumPartitions() #output 2

###To ensure filters don't get pushed down
df_covid = df_covid.withColumn("_catted", F.concat_ws('',*df_covid.columns))

######Apply filter
df_covid = df_covid.filter(F.length(df_covid._catted) > 20)

######count post filter rows
df_covid.count()

作业成功完成,以下是spark web UI中我的executor选项卡的快照

我不明白这两件事:
1.为什么峰值执行内存为0?我正在阅读所有数据,连接所有列,并对数据应用过滤器。由于筛选器位于串联列上,因此在读取本身时不会下推筛选器
1.为什么堆外JVM内存峰值不为0?我没有配置堆外内存,而且默认情况下它是关闭的,那么为什么我会在选项卡中看到堆外JVM内存?

kr98yfug

kr98yfug1#

对于您的第一季度,如果您深入了解Spark内存管理概述:
Spark中的内存使用主要福尔斯两类:执行和存储。执行内存是指用于混洗、连接、排序和聚合中的计算的内存,而存储内存是指用于跨集群缓存和传播内部数据的内存。
在Spark中,并不是所有的动作都会使用执行内存。它通常用于短期对象和计算,如数据 Shuffle 。因此,即使使用连接和筛选,也不会使用执行内存。

相关问题