带有替代方法的重载方法值选择
Posted
技术标签:
【中文标题】带有替代方法的重载方法值选择【英文标题】:overloaded method value select with alternatives 【发布时间】:2021-10-15 13:43:33 【问题描述】:我正在尝试选择更多列并转换所有列,但我收到此错误
"重载的方法值选择与备选方案:(col: 字符串,列:字符串*)org.apache.spark.sql.DataFrame(列: org.apache.spark.sql.Column*)org.apache.spark.sql.DataFrame 不能 应用于 (org.apache.spark.sql.Column, org.apache.spark.sql.Column, 字符串)"
代码是这样的:
val result = df.select(
col(s"$Constant.CS_exp.$Constant.DATI_CONTRATTO.$Constant.NUMERO_CONTRATTO").cast(IntegerType),
col(s"$Constant.CS_exp.$Constant.DATI_CONTRATTO.$Constant.CODICE_PORTAFOGLIO").cast(IntegerType),
col(s"$Constant.CS_exp.$Constant.RATEALE.$Constant.STORIA_DEL_CONTRATTO"))
【问题讨论】:
我认为该错误意味着编译器不确定要使用哪种选择方法。你没有更多的错误信息(多行)吗? @Juh_ 是的,这是完整的错误:使用替代方法选择重载方法值:(col: String,cols: String*)org.apache.spark.sql.DataFrame (cols: org .apache.spark.sql.Column*)org.apache.spark.sql.DataFrame 不能应用于 (org.apache.spark.sql.Column, org.apache.spark.sql.Column, String) 【参考方案1】:错误消息的最后一部分表示编译器找不到带有适合您代码的 api 的“选择”方法:select(Column, Column, String)
但是,编译器找到了 2 种可能的方法,但它们不适合:
select(col: String, cols: String*)
select(cols: Column*)
(*
表示“任意数量”)
这个,我确定。
但是,我不明白为什么您给出的代码实际上是 select(Column, Column, Column)
,它适合 select(cols: Column*)
api。出于某种原因,它认为最后一个参数是String
。可能有些括号放错了
在这种情况下,我所做的就是拆分代码以验证类型:
val col1: Column = col(s"$Constant.CS_exp.$Constant.DATI_CONTRATTO.$Constant.NUMERO_CONTRATTO").cast(IntegerType)
val col2: Column = col(s"$Constant.CS_exp.$Constant.DATI_CONTRATTO.$Constant.CODICE_PORTAFOGLIO").cast(IntegerType)
val col3: Column = col(s"$Constant.CS_exp.$Constant.RATEALE.$Constant.STORIA_DEL_CONTRATTO")
val result = df.select(col1, col2, col3)
检查编译是否正常
【讨论】:
以上是关于带有替代方法的重载方法值选择的主要内容,如果未能解决你的问题,请参考以下文章
如何使用替代方法解决重载方法值寄存器,UDF Spark scala
scala.collection.immutable.Iterable[org.apache.spark.sql.Row] 到 DataFrame ?错误:使用替代方法重载了方法值 createDat