簡體   English   中英

Apache Spark - 'LeftAnti'加入Ambiguous列錯誤

[英]Apache Spark - 'LeftAnti' join Ambiguous column error

我試圖在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 signature
df.as("df").join(Audis.as("audi"), "df.Make == audi.Make", "leftanti")

到目前為止,我所看到的這種類型的連接的所有示例都不是Java,有人可以解釋為什么會出現此錯誤以及什么是工作示例?

與一些同事協商,共度幾個小時。 你需要使用col(“MyColumn”)。equalTo(col(“OtherColumn”))。

這個例子有效:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM