如下图的错误解决方法

出现该错误的原因是因为迭代处理的数据量太大,jvm的自动回收垃圾机制不完善导致的,比如我在这里对2千万的数据迭代处理24次,数据就报错了。![]()
![]()
解决方法一:可以利用isin函数代替24次迭代过程

改为

在这里提一句
df1 = df.withColumn('zt', when(col("zt") == '开业', 1).otherwise(col('zt')))
这一句的作用是把zt列,值为开业的改为1
解决方法二:利用spark的缓存机制df.persist()函数

分别在df4,df9,df14,df20利用缓存机制把数据先存储到硬盘上释放 内存空间,方便我们执行下面迭代程序,解决jvm内存不足问题。(在这里提一句话可以根据需求多设几处perrsist,用时间换取空间)
最后程序跑完可以释放缓存
df4.unpersist()
df9.unpersist()
df14.unpersist()
df20.unpersist()
解决问题完成。

df.persist()函数还可以大大节省运行时间,如在多次需要运行一个数据集情况下,这里属于空间换时间
本文探讨了在处理大量数据时遇到的JVM内存溢出问题,提出了两种解决方案。一是通过使用isin函数替代多次迭代,减少内存消耗;二是利用Spark的缓存机制df.persist(),在关键步骤保存数据到硬盘,缓解内存压力。实践证明,这两种方法能有效避免内存溢出,并且df.persist()还能提高运行效率。在程序完成后,记得释放缓存以释放硬盘空间。
1万+

被折叠的 条评论
为什么被折叠?



