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

spark代码一些特性-关于map与foreach区别变量修改,第1张

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=重新赋值,它的值也是不会被改变的。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5679985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存