Преобразование массива Java в обернутый массив Scala (на JAVA)

#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]))