【问题标题】:Convert Java Array to Scala WrappedArray (In JAVA)将 Java 数组转换为 Scala WrappedArray(在 JAVA 中)
【发布时间】:2021-10-08 21:27:34
【问题描述】:

我正在编写一个 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 转换为 wappedArray。由于输入不匹配,我不能简单地将 inputName 传递到我的 UDF 调用中。

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

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

但我仍然遇到运行时错误:

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

【问题讨论】:

  • WrappedArray.scala 中的伴随对象有一个make 方法。该方法是否显示在您的设置中?
  • @aksappy 我得到 scala.MatchError: [Inp1, Inp2] when using make

标签: java scala apache-spark


【解决方案1】:

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

您可以将其转换为WrappedArray

WrappedArray<String> stringInput = WrappedArray.make(inputName.toArray(new String[0]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 2017-06-13
    • 2019-07-25
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2017-05-13
    相关资源
    最近更新 更多