为了账号安全,请及时绑定邮箱和手机立即绑定

Apache Spark - 'LeftAnti' 加入歧义列错误

Apache Spark - 'LeftAnti' 加入歧义列错误

动漫人物 2023-01-05 16:46:26
我正在尝试在 spark 2.4 中执行 leftanti 连接,但我遇到了错误。Dataset<Row> df = spark.read()            .option("mode", "DROPMALFORMED")            .schema(schema)            .csv("/some/path/cars.csv");Dataset<Row> Audis = df.filter(col("Make").equalTo("Audi"));Dataset<Row> BMWs = df.filter(col("Make").equalTo("BMW"));Audis.join(BMWs, "Make").show();df.as("df").join(Audis.as("audi"), col("Make"), "leftanti")           .show();第一个连接工作正常,但对于 leftanti,我收到以下错误:org.apache.spark.sql.AnalysisException: Reference 'Make' is ambiguous, could be: df.Make, audi.Make.;为什么这会模棱两可?它应该知道在这种连接中哪个列应该检查“IS NOT NULL”。其他示例通过提供列表达式在 Scala 中显示了这一点,但这在 Java 中似乎是不可能的,因为没有方法签名支持像 'df.Make == Audi.Make' 这样的表达式字符串// No method exists for such a signaturedf.as("df").join(Audis.as("audi"), "df.Make == audi.Make", "leftanti")到目前为止,我看到的所有此类连接示例都不是 Java 语言,有人可以解释为什么会出现此错误以及什么是有效示例吗?
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

咨询一些同事并一起度过几个小时。您需要使用 col("MyColumn").equalTo(col("OtherColumn"))。

这个例子有效:

df.as("df").join(Audis.as("audi"), col("df.Make").equalTo(col("audi.Make")), "leftanti")


查看完整回答
反对 回复 2023-01-05
  • 1 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信