#java #scala #apache-spark
Вопрос:
Я пишу приложение Java Spark и пытаюсь написать модульный тест для одного из моих пользовательских файлов. Это UDF принимает массив строк и возвращает значение Long:
protected UDF1<WrappedArray<String>, Long> convertMyArray() {
return (WrappedArray<String> s) -> {
return ...;
};
}
Когда я тестирую его с помощью сеанса Spark, логика работает нормально. моя проблема в том, как я могу unittest
следовать этой логике.
@Test
public void arrayConversion() throws Exception {
ArrayList<String> inputName = new ArrayList<String>() {
{
add("Inp1");
add("Inp2");
}
};
assertEquals(5, myUDF.convertMyArray().call(...);
}
Как я могу перейти inputName
в wappedArray. Я не могу просто перейти inputName
в свой вызов UDF из-за несоответствия ввода.
Я также пытался использовать make
на основе WrappedArray.scala::Make
WrappedArray<String> stringInput = WrappedArray.make(inputName);
Но я все равно получаю ошибку времени выполнения:
scala.MatchError: [Inp1, Inp2] when using make
Комментарии:
1. Сопутствующий объект в WrappedArray.scala имеет
make
метод. Этот метод отображается в вашей настройке?2. @aksappy Я получаю scala. Ошибка соответствия: [Inp1, Inp2] при использовании make
Ответ №1:
Вы создаете Java ArrayList
, который является не массивом, а коллекцией Java.
Вы можете преобразовать его в a WrappedArray
с помощью
WrappedArray<String> stringInput = WrappedArray.make(inputName.toArray(new String[0]))