dataset的foreachPartition方法有多个重载函数,引起编译错误

来源:9-13 -需求一统计结果写入到MySQL

qq_浴火重生_sFJLSU

2019-10-01

/**
* 将统计结果写入到MySQL中
*/
try {
videoAccessTopNDF.foreachPartition(partitionOfRecords => {
// val list = new ListBuffer[DayVideoAccessStat]

    //        partitionOfRecords.foreach(info => {
    //          val day = info.getAs[String]("day")
    //          val cmsId = info.getAs[Long]("cmsId")
    //          val times = info.getAs[Long]("times")
    //
    //          /**
    //           * 不建议大家在此处进行数据库的数据插入
    //           */
    //
    //          list.append(DayVideoAccessStat(day, cmsId, times))
    //        })
    //
    //        StatDAO.insertDayVideoAccessTopN(list)
  })
} catch {
  case e:Exception => e.printStackTrace()
}

这段代码的这一行: videoAccessTopNDF.foreachPartition(partitionOfRecords => {
在idea中不报错,但编译的时候报下面的错,查了一个晚上,不知道什么问题,请老师指点
Error:(153, 25) ambiguous reference to overloaded definition,
both method foreachPartition in class Dataset of type (func: org.apache.spark.api.java.function.ForeachPartitionFunction[org.apache.spark.sql.Row])Unit
and method foreachPartition in class Dataset of type (f: Iterator[org.apache.spark.sql.Row] => Unit)Unit
match argument types (Object => Unit)
videoAccessTopNDF.foreachPartition(partitionOfRecords => {

写回答

3回答

qq_浴火重生_sFJLSU

提问者

2019-10-02

问题已经解决了,是foreachPartition有多个重载方法的问题,编译器不知道用哪一个所以报上面的错,显式指定方法就可以了,我看之前有人提出类似的问题,说找不到foreach的问题,也是这个原因。用的spark版本比较新,应该是新版本才有的问题。

1
1
Michael_PK
不同的spark版本写法可能有些许差别
2019-10-02
共1条回复

qq_浴火重生_sFJLSU

提问者

2019-10-01

之前一边看视频一边手敲的代码,没有问题,为了方便后续学习,全部用了GIT上的代码替换后就出现这个问题了

0
1
Michael_PK
spark版本一样吗?
2019-10-01
共1条回复

Michael_PK

2019-10-01

你到git上把那代码拷贝下来,使用对比工具,beyond compare对比下哪里差别

0
0

以慕课网日志分析为例 进入大数据Spark SQL的世界

快速转型大数据:Hadoop,Hive,SparkSQL步步为赢

1644 学习 · 1129 问题

查看课程