转换Java数组到Scala WrappedArray(在Java中)



我正在编写一个Java Spark应用程序,我正在尝试为我的udf之一编写单元测试。这个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转换为wappearray。由于输入不匹配,我不能简单地将inputName传递到UDF调用中。

我也尝试过使用基于wrappearray .scala::Make的make

WrappedArray<String> stringInput = WrappedArray.make(inputName);

但是我仍然得到运行时错误:

scala.MatchError: [Inp1, Inp2] when using make

您正在构造一个JavaArrayList,它不是一个数组,而是一个Java集合。

您可以使用

将其转换为WrappedArray
WrappedArray<String> stringInput = WrappedArray.make(inputName.toArray(new String[0]))

最新更新