记录一些spark缓存中的方法

此为使用者自己选择释放需要的已经缓存的rdd。

def unpersistUnuse(rddString: Set[String], sc: SparkContext) = {
  var persistRdds = sc.getPersistentRDDs
  persistRdds.foreach(truple => {
    val xx = truple._2.toString()
    val ddd = rddString
    if (!rddString.contains(truple._2.toString())) {
      truple._2.unpersist()
    }
  })
}

针对多个sp串行跑,其中采用多个sp之间进行重新new sparkcontext和sc.stop进行,否则中间许多缓存问题无法解决,始终会有内存溢出的问题,重新初始化sparkcontext会大概有40s到50s 的时间,针对几百G的数据跑数来说,微乎其微,主要考虑安全性,可以大表初始化一次sparkContext,多个小表初始化一次。多次测试进行优化

采用insert into 表名 (字段,字段1)select 字段,字段1 from 表名,hive支持这种方式的insert into方式,可以解决一些关于表与表之前插入数据时表结构不一致的情况。(一般为增加或减少字段问题)

spark 提交模式中,yarn-client模式和yarn-cluster模式在使用过程有部分差异,其中表现为:yarn-client会显示stage进度,yarn-cluster是不会显示的。程序中如果存在多次sparkContext初始化,中间出现sc.stop,yarn-client会继续初始化,而yarn-cluster不会继续初始化。

count(distinct a)over(partion by c,d)
该函数在hive 1.2中不支持,在hive2.1以后才支持,使用
count(a) over (partion by c,d,a)这种方式来解决。
count(distinct a)这种方式是支持的

找到一个比较好的办法来检验已经替换的sparksql语法,将原先改变之后的语法逻辑,在oracle上做减集 a minus b,b minus a,比较是否出现差集。

parquet如果在多次读写错误数据,有可能是parquet被写坏了,将表删除重新建立,还有一种情况,第一次写,不出错,第二次写parquet出错,报parquet找不到,处理方法,要么使用refresh table,清理下之前的表,要么使用count()触发一下rdd。注意触发一定要在writeparquet前触发

在xml解析中,报表层逻辑复杂步骤多,所以测试时最好将多个临时表落地,才能够将后面的步骤进行测试,否则每次重跑前面多步,使得测试开发效率大大降低。

不支持null这种数据类型,必须使用‘0’等数字代替

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值