Spark Sql как смоделировать current_timestamp - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь написать модульные тесты для Spark Sql с использованием current_timestamp. Каждый раз, когда выполняется тест, он оценивает время, поэтому время не соответствует времени в утверждении.

Это метод, который я хочу проверить:

protected Dataset<Row> convertInput(Dataset<Row> inputData){
    return sparkSession.sql("select a+1, b+2, current_timestamp as updated_at");
}

И я хотел бы проверить метод следующим образом:

@Test
public void testConvertInput() {
         Dataset<Row> input = fromJson("test1_input.json");
         Dataset<Row> expected = fromJson("test1_output.json");

         Dataset<Row> output = convertInput(input);
         DatasetAssert.assertSets(expected, output);       
}

Утверждение не выполнено из-за сравнения временных меток.

Я попытался добавить столбец current_timestamp во входной набор данных, но это не не охватывает все мои случаи использования.

1 Ответ

2 голосов
/ 14 января 2020

Я решил это, добавив столбец с именем current_timestamp

@Test
public void testConvertInput() {
     Timestamp mockTime = Timestamp.from(Instant.parse("2020-01-10T12:00:00.000Z"));
     Dataset<Row> input = fromJson("test1_input.json").withColumn("current_timestamp", lit(mockTime));
     Dataset<Row> expected = fromJson("test1_output.json");

     Dataset<Row> output = convertInput(input);
     DatasetAssert.assertSets(expected, output);       
}
...