spark报出An error occurred while calling o209.showString.和GC overhead limit exceeded的解决方法

如下图的错误解决方法

出现该错误的原因是因为迭代处理的数据量太大,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()函数还可以大大节省运行时间,如在多次需要运行一个数据集情况下,这里属于空间换时间

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值