Я пытаюсь выполнить соединение leftanti в spark 2.4, но у меня возникают ошибки.
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, может кто-нибудь объяснить, почему возникает эта ошибка и что является рабочим примером?