spark代码一些特性-关于map与foreach区别/变量修改

1、关于map与foreach区别:
map:遍历RDD,将函数f应用于每一个元素,返回新的RDD(transformation算子);
foreach:遍历RDD,将函数f应用于每一个元素,无返回值(action算子);
2、切记:spark中对变量的修改没有原地修改,这个和Python有很大区别
(1)val amendDatas: Seq[DataFrame] = datas.indices.map(idx=>{
      datas(idx).withColumn(columnName.concat("_").concat(idx.toString),getCode(datas(idx)(columnName)))
    })

说明:datas原本是一个Array[DataFrame]变量,等号右边对array中的每一个元素做了transform,结果等号右边相当于形成了一个新的Array[T],但是需注意的是,如果要使用这个新的Array[T]则需要赋值给一个新的变量,原来的datas并不会被改变;

(2) var retData = amendDatas.head
    Range(1,datas.length).foreach{i => {
      retData = retData.join(amendDatas(i).select(idName,columnName.concat("_").concat(i.toString)),idName)
    }}
说明:retData尽管被定义为var类型,仅代表它可以被重新赋值修改值,因此foreach里如果不把retData=重新赋值,它的值也是不会被改变的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值