请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

/**
* 将统计结果写入到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

3回答

提问者 qq_浴火重生_sFJLSU 2019-10-02 08:15:54

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

1 回复 有任何疑惑可以回复我~
  • 不同的spark版本写法可能有些许差别
    回复 有任何疑惑可以回复我~ 2019-10-02 08:18:31
提问者 qq_浴火重生_sFJLSU 2019-10-01 08:23:59

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

0 回复 有任何疑惑可以回复我~
  • spark版本一样吗?
    回复 有任何疑惑可以回复我~ 2019-10-01 08:25:12
Michael_PK 2019-10-01 07:11:07

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信