You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark与Scala代码报错求助:':' expected but '(' found

解决Scala函数定义中的':' expected but '(' found错误

首先,这个报错的核心原因是Scala作为强类型语言,要求函数参数必须显式声明类型,你的formatRow函数里的参数x没有指定类型,导致编译器无法正确解析代码结构,所以抛出了这个语法错误。

错误代码分析

你的原函数定义:

def formatRow (x) = Distance( x.getAs[String]("id"), distanceTo( x.getAs[Double]("pickup_latitude"), x.getAs[Double]("pickup_longitude"), x.getAs[Double]("dropoff_latitude"), x.getAs[Double]("dropoff_longitude") ) )

这里x没有类型声明,Scala编译器在解析到x后面的=之前,期待看到类型声明的:,但直接遇到了后面的函数体逻辑,因此触发了':' expected but '(' found的错误。

修正后的代码

结合你使用getAs方法的场景,x应该是Spark的Row类型(DataFrame中的行对象),所以需要给参数加上类型声明:

import org.apache.spark.sql.Row

def formatRow(x: Row) = Distance(
  x.getAs[String]("id"),
  distanceTo(
    x.getAs[Double]("pickup_latitude"),
    x.getAs[Double]("pickup_longitude"),
    x.getAs[Double]("dropoff_latitude"),
    x.getAs[Double]("dropoff_longitude")
  )
)

我把代码格式化了一下,这样更易读,也能更清晰地看到结构。

额外提示

  1. 确保你已经导入了org.apache.spark.sql.Row,不然编译器会识别不了Row类型。
  2. 如果Distance是自定义的case class,要确保它已经正确定义,并且参数类型和你传入的类型匹配(第一个参数是String,第二个是distanceTo返回的类型)。

内容的提问来源于stack exchange,提问作者Ingrid Jesus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:05:41