rdd.map中引用外部val报错"Task not serializable" val Size=5val fixedLogs = rdd.map{row =>{ Size } }在spark-shell 中声明变量val Size=5;然后在map中引用,报错"Task not serializable"该如何处理谢谢大神们 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 val bcSize = sc.broadCast(size)val fixedLogs = rdd.map{row =>{ bcSize.value } } 因为你RDD的transform和action算子是在executor上执行的,而你写的main方法,是在driver上运行,所以你不可能跨机器跨进程去访问你在driver上的size。要访问,只能用广播变量。这个是在每一个executor上产生一个被广播对象的副本。 我用的是SQL的dataFrame.rdd.map以下代码还是不能序列化val bcSize = sc.broadcast(5)val test = dayErrorDF.select("judge.*","fix.*").rdd.map{row =>bcSize.value} scala> val df = sqlContext.range(1,1000)df: org.apache.spark.sql.DataFrame = [id: bigint]scala> val bcSize = sc.broadcast(5)bcSize: org.apache.spark.broadcast.Broadcast[Int] = Broadcast(0)scala> val m = df.rdd.map{ row => bcSize.value }m: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[6] at map at <console>:31scala> m.countres2: Long = 999一点问题没有啊 dayErrorDF.select("judge.*","fix.*") 我觉得是这部分的问题,我没见过这种写法。你单独dayErrorDF.select("judge.*","fix.*").show看看会不会报错 dayErrorDF.select("judge.*","fix.*") 我觉得是这部分的问题,我没见过这种写法。你单独dayErrorDF.select("judge.*","fix.*").show看看会不会报错可以显示,就是一个嵌套,把“.*”去掉也不行,很奇怪。 dayErrorDF.select("judge.*","fix.*") 我觉得是这部分的问题,我没见过这种写法。你单独dayErrorDF.select("judge.*","fix.*").show看看会不会报错可以显示,就是一个嵌套,把“.*”去掉也不行,很奇怪。你这问题刷新了我的三观spark版本是多少? dayErrorDF.select("judge.*","fix.*") 我觉得是这部分的问题,我没见过这种写法。你单独dayErrorDF.select("judge.*","fix.*").show看看会不会报错可以显示,就是一个嵌套,把“.*”去掉也不行,很奇怪。你这问题刷新了我的三观spark版本是多少?1.6.0 Red Hat 发布 OpenStack 预览版本 OpenStack 和CloudStack的异同 求云计算学习路线? fuel自动部署openstack问题 想架设一个网页游戏,配了一台服务器,这样的配置,能跑多少人? 丹麦公司求教 怎么安装python的开发工具包boto呢? spark jar 读取hdfs文件错误 SparkUI界面打不开 ambari 安装的spark 怎么使用Standalone方式提交任务 为什么启动service nagios start 需要密码,这个密码是什么,怎么设置 如何构建大数据中心
val fixedLogs = rdd.map{row =>{
bcSize.value
}
}
以下代码还是不能序列化val bcSize = sc.broadcast(5)
val test = dayErrorDF.select("judge.*","fix.*").rdd.map{row =>bcSize.value
}
df: org.apache.spark.sql.DataFrame = [id: bigint]scala> val bcSize = sc.broadcast(5)
bcSize: org.apache.spark.broadcast.Broadcast[Int] = Broadcast(0)scala> val m = df.rdd.map{ row => bcSize.value }
m: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[6] at map at <console>:31scala> m.count
res2: Long = 999一点问题没有啊
dayErrorDF.select("judge.*","fix.*") 我觉得是这部分的问题,我没见过这种写法。
你单独dayErrorDF.select("judge.*","fix.*").show看看会不会报错
dayErrorDF.select("judge.*","fix.*") 我觉得是这部分的问题,我没见过这种写法。
你单独dayErrorDF.select("judge.*","fix.*").show看看会不会报错可以显示,就是一个嵌套,把“.*”去掉也不行,很奇怪。
dayErrorDF.select("judge.*","fix.*") 我觉得是这部分的问题,我没见过这种写法。
你单独dayErrorDF.select("judge.*","fix.*").show看看会不会报错可以显示,就是一个嵌套,把“.*”去掉也不行,很奇怪。
你这问题刷新了我的三观spark版本是多少?
dayErrorDF.select("judge.*","fix.*") 我觉得是这部分的问题,我没见过这种写法。
你单独dayErrorDF.select("judge.*","fix.*").show看看会不会报错可以显示,就是一个嵌套,把“.*”去掉也不行,很奇怪。
你这问题刷新了我的三观spark版本是多少?1.6.0