我正在嘗試在 spark 2.4 中執(zhí)行 leftanti 連接,但我遇到了錯(cuò)誤。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();第一個(gè)連接工作正常,但對于 leftanti,我收到以下錯(cuò)誤:org.apache.spark.sql.AnalysisException: Reference 'Make' is ambiguous, could be: df.Make, audi.Make.;為什么這會模棱兩可?它應(yīng)該知道在這種連接中哪個(gè)列應(yīng)該檢查“IS NOT NULL”。其他示例通過提供列表達(dá)式在 Scala 中顯示了這一點(diǎn),但這在 Java 中似乎是不可能的,因?yàn)闆]有方法簽名支持像 'df.Make == Audi.Make' 這樣的表達(dá)式字符串// No method exists for such a signaturedf.as("df").join(Audis.as("audi"), "df.Make == audi.Make", "leftanti")到目前為止,我看到的所有此類連接示例都不是 Java 語言,有人可以解釋為什么會出現(xiàn)此錯(cuò)誤以及什么是有效示例嗎?
1 回答

SMILET
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
咨詢一些同事并一起度過幾個(gè)小時(shí)。您需要使用 col("MyColumn").equalTo(col("OtherColumn"))。
這個(gè)例子有效:
df.as("df").join(Audis.as("audi"), col("df.Make").equalTo(col("audi.Make")), "leftanti")
添加回答
舉報(bào)
0/150
提交
取消