spark应用程序开发总结

1.静态变量取不到值,报空指针异常

出现这种情况主要原因:

rdd的操作中去读取配置文件中的值,如:
public static float col1= Float.valueOf(RESOURCE_BUNDLE.getString("col1"));
解决办法:把操作rdd的方法抽取到一个单独的类中,让该类实现序列化接口,把变量通过构造函数或者函数参数传到该类中。

2.spark sql,字段值为null时使用row.getAs方法报异常

取值时使用row.get(index),例如:

Java代码 

 收藏代码

  1. if (row.get(3) == null){  
  2.     double field1 = -1;  
  3. }else{  
  4.     double field1 = row.getAs("field1");  
  5.     ...  
  6. }  

 3.Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class

经检查,类是存在的,可能是在类A静态变量初始化时报异常导致类A加载时报异常,所以其他类找不到类A。

4.静态变量引用其他类的静态变量,出现空指针异常

可以尝试让最终的调用者在使用时再去调用,即不在静态变量初始化时去调用另外类的静态变量。

5.rdd.cache()

需要多处使用的rdd,要cache起来, 分区过多的,要重新分区下,分区适当改小点。

6.spark sql group by之后进行join操作速度慢

先将待处理的rdd中的对象先根据各个需要group by的字段排序,再使用spark sql关联统计。
比如需要根据field1, field2, field3 group by,可以先对rdd根据field1,field2, field3排序,然后
把rdd注册成临时表进行统计关联,在我的程序中按照这种方式这样优化之后,速度提升了10倍。

 

7.scala Seq转成java类型

Seq<Long> seq =  null;

List<Long> list = scala.collection.JavaConversions.seqAsJavaList(seq);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值