Я пытаюсь написать несколько тестов для приложения Java Spark-Sql. Одна операция, которую мне нужно проверить, переименовывает столбец, и я столкнулся с некоторыми трудностями, сравнивая фактическое значение переименованного столбца с моим ожидаемым значением. После некоторых экспериментов я смог написать следующие два теста, чтобы продемонстрировать проблему:Как проверить равенство столбцов искры после переименования
Во-первых, как проверка работоспособности, я попробовал это (df - это искра sql DataFrame
, сгенерированная путем чтения некоторых данных примера из файла json Я тестирую):
@Test
public void testColumnEquality() throws Exception {
Column val1 = df.col("col2");
Column val2 = df.col("col2");
Assert.assertEquals(val1, val2);
}
Который проходит, как и следовало ожидать. Тогда я попытался это:
@Test
public void testReanmeColumnEquality() throws Exception {
Column val1 = df.col("col2").as("col2");
Column val2 = df.col("col2").as("col2");
Assert.assertEquals(val1, val2);
}
, который завершается с ошибкой java.lang.AssertionError: expected:<col2 AS col2#4L> but was:<col2 AS col2#5L>
копаться в коде лестницу (полное раскрытие - Я знаю, что очень мало Scala), похоже, что это связано с NamedExpression
уникальным идентификатором ,
Есть ли способ разумно проверить, что эти два столбца представляют одни и те же операции с одним и тем же псевдонимом?
(я работаю в искре 1.6, и, в идеале, как решение для этой версии строки, но если это зафиксировано в 2.0, что также будет хорошей информацией.)
Спасибо вам.
Можете ли вы сделать это в Скала? – Wilmerton