Я использую Spark Java API и пытаюсь найти записи, которые были удалены между 2 файлами с использованием набора данных. Для одного теста, который я имею, я сравниваю 2 идентичных файла, которые имеют 2 столбца. Я использую один из столбцов в качестве типа PK (если PK отсутствует в более новом файле, это удаление).
Пример файла
ID | TYPE
ABC | BUY
CDE | BUY
FGH | SELL
Наборы данных были созданы как:
Dataset<Row> previous/actual = sparkSession.read().
.option("inferSchema","true")
.option("header","true")
.option("delimiter","|")
.csv(*pathToFile*);
У меня есть противоречивые результаты для сценариев ниже
Пример 1:
Dataset<Row> deleted = previous.join(actual,previous.col("ID").equalTo(actual.col("ID")),"leftanti");
В результате я получаю:
|
Труба напечатана в моем выходном файле. Если я вызываю delete.show (), я получаю null | null
Пример 2 очень похож, но я вычисляю хеш для всех столбцов (для обоих наборов данных отдельно) как:
//columns has the content of previous.columns();
previous = previous.withColumn("hash", functions.hash(columns.toArray(new Column[0])));
Я заменяю идентификатор на хеш в запросе
Dataset<Row> deleted = previous.join(actual,previous.col("hash").equalTo(actual.col("hash")),"leftanti");
Но теперь мой результат, как и ожидалось, является пустым файлом. Почему результаты отличаются?