方法重载值选择的备选项

3

我想选择更多的列并将它们全部转换,但是我收到了以下错误:

"重载方法值select有多个备选项:(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)"

代码如下:

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_
@Juh_ 是的,这是完整的错误信息:重载方法值select有以下可选项: (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) - Valerio Auricchio
1个回答

1
错误消息的最后一部分意味着编译器找不到一个适合你的代码的api方法"select(Column, Column, String)"。
然而,编译器找到了两种可能的方法,但它们不适合:
- "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)

并检查它是否编译正确。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接