繁体   English   中英

无法解析作为字符串传递的列的列名错误 - Spark Scala

[英]Cannot resolve column name error for column passed as strings - Spark Scala

我有一个奇怪的问题。 我正在尝试使用自动生成的字符串从数据框中选择一些列。 虽然如果我直接传递它们,选择工作正常,但如果我在字符串中放入相同的表达式并将字符串传递给选择,它会失败并出现错误“无法解析给定列列表的列名”。 它以某种方式向字符串添加反引号 ` 并尝试找到完整的字符串作为列名(而不是评估字符串表达式并将其用作列名)

下面的例子:

这是有效的,historyJoinedDF 是一个数据帧,它是两个数据帧之间的外连接的输出:

historyJoinedDF.select(
        currentUnmatchedDF("sessiondetail_sessionid").as("sessiondetail_sessionid")
      ).show()

这不起作用:

val test = """currentUnmatchedDF("sessiondetail_sessionid").as("sessiondetail_sessionid")"""
      historyJoinedDF.select(
      test
     .show()

失败:

cannot resolve '`currentUnmatchedDF("sessiondetail_sessionid").as("sessiondetail_sessionid")`' given input columns:

不确定这是否重要,但我的数据帧是具有相同架构的两个数据帧之间的完整外部联接的输出(因此需要使用 DF 名称限定列名)。

编辑:在下面添加 currentUnmatchedDF.show(false) 和 historyJoinedDF .show(false) 的输出,两者都有几百列(相同),因此仅显示问题中提到的列。

当前不匹配的DF

历史加入DF

select 方法将列名作为参数。 所以你应该做类似的事情

someDf.select("sessiondetail_sessionid")

或者如果您想获取其他 df 的列并在您应该使用的某些 df 中选择它们

import org.apache.spark.sql.functions.col
someDf.select(otherDf.columns.map(col): _*) //: _* transforms collection to varag

但您正在尝试获取具有文字名称的列

currentUnmatchedDF("sessiondetail_sessionid").as("sessiondetail_sessionid")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM