Отображение строки набора данных: «Целевой тип этого выражения должен быть функциональным интерфейсом» - PullRequest
0 голосов
/ 25 апреля 2018

При попытке сопоставления со строкой набора данных, но с большим количеством проблем, я получаю ошибку затмения "Целевой тип этого выражения должен быть функциональным интерфейсом" на map(r -> new MapFunction<r, List<Tuple3<Long, Integer, Double>>>().Код ниже:

Dataset<Object> df1 = session.read().parquet(tableName).as(Encoders.bean(Object.class));

        JavaRDD<List<Tuple3<Long, Integer, Double>>> tempData = df1.map(r -> new MapFunction<r, List<Tuple3<Long, Integer, Double>>>(){


            // to get each sample individually
            List<Tuple2<String, Integer>> samples = zipWithIndex((r.getString(9).trim().split(",")));

            // Gets the unique identifier for that pos.
            Long snp = r.getString(1);

            // Calculates the distance for this pos for each sample.
            // i.e. 0|0 => 0, 0|1 => 1, 1|0 => 1, 1|1 => 2
            return samples.stream().map(t -> {
                String alleles = t._1();
                Integer patient = t._2();

                List<String> values = Arrays.asList(alleles.split("\\|"));

                Double firstAllele = Double.parseDouble(values.get(0));
                Double secondAllele = Double.parseDouble(values.get(1));

                // Returns the initial SNP id, patient id and the distance in form of Tuple.
                return new Tuple3<>(snp, patient, firstAllele + secondAllele);
            }).collect(Collectors.toList());
        });

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 апреля 2018

Из-за отсутствия ясности я просто даю свои НЕПРОВЕРЕННЫЕ предложения.

Предполагая, что вы имеете в виду org.apache.spark.api.java.function.MapFunction.

Я вижу ряд проблем,

  1. Использование r в качестве типа в шаблоне в строке MapFunction<r ..>

  2. Определение анонимной функции неверно, либо используйте лямбдувыражение:

`` `

JavaRDD<List<Tuple3<Long, Integer, Double>>> tempData = df1.map(r -> () {
// your definition
}

` ``

Или переместите свой код в метод класса, ```

JavaRDD<List<Tuple3<Long, Integer, Double>>> tempData = df1.map(r -> new MapFunction<theRespectiveType, List<Tuple3<Long, Integer, Double>>>(){
public List<Tuple3<Long, Integer, Double>> call(theRespectiveType variable)
{
// your implementation here
});

` ``

...