Spark DataFrame连接报错UnresolvedAttribute:origin字段无法解析
Spark DataFrame连接报错:UnresolvedAttribute 'origin' 问题解析
问题场景
你在Spark 3.0.0中尝试将包含origin字段的myDF与包含IATA字段的anotherDF执行连接,代码如下:
myDF.join( anotherDF, anotherDF.col("IATA") === $"origin" ).select("City", "State", "date", "delay", "distance", "destination").show()
运行后报错:
Exception in thread "main" java.lang.RuntimeException: Unsupported literal type class org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute 'origin'
问题原因
- 隐式转换缺失:
$"origin"是Spark的语法糖,依赖当前SparkSession的隐式转换(import spark.implicits._)才能将字符串解析为合法的Column对象,未导入时会被识别为未解析属性。 - 字段归属不明确:即使导入了隐式转换,连接双表时Spark无法自动推断
$"origin"属于myDF,这种模糊写法会触发解析歧义,导致报错。
解决方法
方式一:明确指定字段所属DataFrame
直接用myDF.col("origin")或myDF("origin")替代$"origin",消除归属歧义:
myDF.join( anotherDF, anotherDF.col("IATA") === myDF.col("origin") ).select("City", "State", "date", "delay", "distance", "destination").show()
方式二:补全隐式转换并使用全局列引用
先导入SparkSession隐式转换:
import spark.implicits._
再导入函数包后使用col("origin")引用列(多表连接时仍推荐方式一避免歧义):
import org.apache.spark.sql.functions._ myDF.join( anotherDF, anotherDF.col("IATA") === col("origin") ).select("City", "State", "date", "delay", "distance", "destination").show()
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

