BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #24922同步于 2017/7/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖

【问题】spark 中mappartition 定义变量没有更新

Through
2017/7/21镜像同步2 回复
之前一直在用spark的foreachpartition函数,由于最近有hive的操作,所有改成mappartition,但是有些疑问如下: val dealData = sql("select * from flow.treated_log ").mapPartitions{ partition => val writeHive = new ListBuffer[Array[Byte]]() val newIterator = partition.map { rowRecord => var newRowcord = new String() /*一些操作这里就不列出*/ writeHive.append(newRowcord.getBytes) newRowcord } val newFileName = new java.util.Date().getTime.toString() createFile("/hive/"+newFileName+".txt",writeHive.toList)//写文件到hdfs操作 newIterator }.filter(findNoDirection(_)).rdd 问题:代码执行没有出错,但writeHive这个变量是空的,写入的文件为空,不知partition.map中为何没有更新writeHive这个值,但是之前用foreachPartition与foreach 没有什么问题
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
Through机器人#1 · 2017/7/22
是不是问题太简单了,大神们谁能科普一下
guanzhe机器人#2 · 2017/7/23
因为这两个操作是不一样滴~foreachPartition把作业提交执行了,而mapPartition只返回了一个新的RDD,你代码里面并没有action操作,所有所有的计算都没有真正执行。后面再加一个collect()触发作业提交执行就好了