【问题标题】: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)

标签: scala apache-spark


【解决方案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)

检查编译是否正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    相关资源
    最近更新 更多