本来想模拟一个数据倾斜的实例,以及其各种解决方案,不料遇到一个报错:
报错如下:
Exception in thread "main" org.apache.spark.SparkException: Task not serializable
.........
Caused by: java.io.NotSerializableException: org.apache.spark.unsafe.types.UTF8String$IntWrapper
spark的Task not serializable问题,但是我spark代码中没有使用外部变量,也没有用到实体类,报错的代码如下:
user_rdd.join(record_rdd,record_rdd("uid")===user_rdd("borrower_id"),"left")
.groupBy(user_rdd("regist_date"))
.agg(sum("borrower_id"))
.as("col2")
.show()
就是两个hive表的DataFrame数据集left join后做一个分组聚合操作而已,百思不得其解。
试过各种方案以及网络搜索各种解决方案,发现是版本问题:
我的版本是spark2.2.0的版本,修改maven的pom文件中的spark的版本为2.2.2,重新运行解决。
注意:如果你改成spark2.4.0,对应的scala版本要用2.12,不然会报错:
Exception in thread "main" java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)V
参考博文:
网友评论