我没有对Spark DataFrame进行缓存或持久化操作。如果我需要在同一个会话中对数据框架进行聚合和修改等多个附加操作,则初始数据框架何时释放内存?
例如:
我加载了一个包含1000万条记录的数据框架DF1。然后我对数据框架进行一些转换,创建了一个新的数据框架DF2。然后在DF2上执行了一系列10个步骤。在整个过程中,我不再需要DF1。如何确保DF1不再存在于内存中并且不会影响性能?是否有任何方法可以直接从内存中删除DF1?或者DF1是否根据“最近最少使用”(LRU)的方法自动删除?
我没有对Spark DataFrame进行缓存或持久化操作。如果我需要在同一个会话中对数据框架进行聚合和修改等多个附加操作,则初始数据框架何时释放内存?
例如:
我加载了一个包含1000万条记录的数据框架DF1。然后我对数据框架进行一些转换,创建了一个新的数据框架DF2。然后在DF2上执行了一系列10个步骤。在整个过程中,我不再需要DF1。如何确保DF1不再存在于内存中并且不会影响性能?是否有任何方法可以直接从内存中删除DF1?或者DF1是否根据“最近最少使用”(LRU)的方法自动删除?
unpersist
即可。否则,内存中没有任何内容。 - Stevenspark.createDataFrame(data=[('A',0)],schema=['LETTERS','NUMBERS'])\
.repartition("LETTERS")\
.write.partitionBy("LETTERS")\
.parquet(f"/{tmpdir}",mode="overwrite")
现在,
df = spark.read.parquet(f"/{tmpdir}")
假设您在上述df上没有设置任何缓存,那么每次Spark找到df的引用时,它将并行读取数据框并计算指定的内容。
请注意,上述解决方案将最小化RAM使用量,但可能需要更多的CPU来进行每次读取。此外,上述解决方案将具有写入parquet的成本。