Причины: java.lang.IllegalArgumentException: значение X типа (Scratch.Bar) не может быть преобразовано в структуру - PullRequest
0 голосов
/ 06 ноября 2019

Я очень озадачен тем, почему следующий код выдает исключение из заголовка:

class Scratch {
    public static void main(String[] args) {
        SparkSession spark = SparkSession
                .builder()
                .master("local")
                .getOrCreate();

        JavaSparkContext javaSparkContext = new JavaSparkContext(spark.sparkContext());
        JavaRDD<String> javaRdd = javaSparkContext.parallelize(Arrays.asList("a", "b", "c"));
        JavaRDD<Foo> simpleRdd = javaRdd.map(Foo::new);

        Dataset fooDs = spark.createDataset(simpleRdd.rdd(), Encoders.bean(Foo.class)); // works perfectly
        UDF1<String, Bar> newBar = Bar::new;
        UserDefinedFunction newBarUdf = udf(newBar, Encoders.bean(Bar.class).schema());
        Dataset fooBarDs = fooDs.withColumn("test", newBarUdf.apply(col("name"))); // doesn't work

        fooBarDs.show(false);
    }

    public static class Bar implements Serializable {
        private String alias;

        public Bar(String alias) {
            this.alias = alias;
        }

        public Bar() {
        }

        public String getAlias() {
            return alias;
        }

        public void setAlias(String alias) {
            this.alias = alias;
        }
    }

    public static class Foo implements Serializable {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Foo(String name) {
            this.name = name;
        }

        public Foo() {
        }
    }
}

У кого-нибудь есть идеи, почему это не поддерживается, потому что такое ощущение, что оно должно быть. Что я делаю неправильно? Есть ли обходной путь?

Примечание. В реальном примере есть несколько столбцов с примитивными полями, и мне нужна возможность преобразовать класс Java во вложенную структуру в виде столбца.

...