spark中返回结果的误用——Array,Set,HashSet

今天在写spark代码时,遇到一个问题,在进行数据过滤时,总是特别的慢,后来分析了一下代码。
主业务逻辑就是用一个较小的文本数据过滤“大数据”,然后我用spark textFile进行加载然后collect形成一个集合,可能是java写多了,看到这个集合有contains方法,就使用了没有多想,然后就特别慢,排查代码发现,collect返回的是Array(scala中Array也有contains方法,这个被我忽略了),所以不用想导致很慢。下面是我做的是一个scala的性能统计的小实验,贴出来仅供参考。

val array = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    val set = Set(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    val hashSet = HashSet(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    val t1 = System.currentTimeMillis()
    for (i <- 0 to 100000) array.contains(5)
    val t2 = System.currentTimeMillis()
    for (i <- 0 to 100000) set.contains(5)
    val t3 = System.currentTimeMillis()
    for (i <- 0 to 100000) hashSet.contains(5)
    val t31 = System.currentTimeMillis()
    println("Hit the target ---> Array time:" + (t2 - t1) + ", Set time : " + (t3 - t2)
      + ", HashSet time : " + (t31 - t3))

    val t4 = System.currentTimeMillis()
    for (i <- 0 to 100000) array.contains(11)
    val t5 = System.currentTimeMillis()
    for (6 <- 0 to 100000) set.contains(11)
    val t6 = System.currentTimeMillis()
    for (i <- 0 to 100000) hashSet.contains(5)
    val t61 = System.currentTimeMillis()
    println("NOT Hit the target ---> Array time:" + (t5 - t4) + ", Set time : " + (t6 -
      t5)+ ", HashSet time : " + (t61 - t6))
  }

结果如下:

Hit the target ---> Array time:32, Set time : 14, HashSet time : 7
NOT Hit the target ---> Array time:14, Set time : 6, HashSet time : 5

看到在10万次的比较下,各个集合的判断性能还是差别巨大,下次在用spark的时候要特别注意了!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值