spark多线程解决行号不同步

zipWithIndex():添加全局有序的索引

zipWithUniqueId只保证唯一,不保证连续性,中间可能有gap(间隔)。

val sparkConf = new SparkConf().setAppName("exam-filterTest").setMaster("local[*]")
    val sc = new SparkContext(sparkConf)

    //读数据
    val lines = sc.textFile(args(0))
    // 每行的数据,生成一个
    // RDD[String]  Array(a,b,...),Array(s,r,...)...
    val lineArr = lines.map(_.split("\\s+"))
    //println(line.map(_.toList).take(2).toBuffer)

    /**
      * 包含 “spark” 的行    行号问题待解决?已经解决
      */
    var i = 0
    //局部的,行号会有变量
//    val linesMap = lineArr.map(x => {
//      i += 1
//      (x,i)
//    })

    // 索引是从0开始的
    val linesMap = lineArr.zipWithIndex() //这行代码保证多线程时候行号是一致的

    //println(linesMap.map(x => (x._1.toList,x._2)).collect().toBuffer)
    val linesContainSpark = linesMap.filter(_._1.contains("Spark"))
    //println(linesContainSpark.map(x => (x._1.toList,x._2)).collect().toBuffer)
    val linesTarget = linesContainSpark.map(x => (x._1.toList,x._2+1))
    linesTarget.saveAsTextFile("E:/sparkDataTest/out-containSpark")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值