将Dataset中的行映射到对象类Spark Java

将Dataset中的行映射到对象类Spark Java,java,apache-spark,java-8,functional-programming,parquet,Java,Apache Spark,Java 8,Functional Programming,Parquet,在使用HBase和Parquet时,我编写了从HBase获取值并将值映射到对象类的代码,但在使用Dataset复制Parquet时遇到了问题 HBase: JavaPairRDD<ImmutableBytesWritable, Result> data = sc.newAPIHadoopRDD(getHbaseConf(), TableInputFormat.class, ImmutableBytesWritable.class, Result.class);

在使用HBase和Parquet时,我编写了从HBase获取值并将值映射到对象类的代码,但在使用Dataset复制Parquet时遇到了问题

HBase:

JavaPairRDD<ImmutableBytesWritable, Result> data = sc.newAPIHadoopRDD(getHbaseConf(),
            TableInputFormat.class, ImmutableBytesWritable.class, Result.class);

JavaRDD<List<Tuple3<Long, Integer, Double>>> tempData = data
                .values()
                //Uses HBaseResultToSimple... class to parse the data.
                .map(value -> {
                    SimpleObject object = oParser.call(value);
                    // Get the sample property, remove leading and ending spaces and split it by comma
                    // to get each sample individually
                    List<Tuple2<String, Integer>> samples = zipWithIndex((object.getSamples().trim().split(",")));

                    // Gets the unique identifier for that sp.
                    Long sp = object.getPos();

                    // Calculates the hamming distance for this sp 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 firstA = Double.parseDouble(values.get(0));
                        Double second = Double.parseDouble(values.get(1));

                        // Returns the initial sp id, p id and the distance in form of Tuple.
                        return new Tuple3<>(snp, patient, firstAllele + secondAllele);
                    }).collect(Collectors.toList());
                });
我将数据从拼花地板读入数据集,但simple无法复制上述方法

Dataset<Row> url = session.read().parquet(fileName);
我只需要知道如何将Dataset中的行映射到对象类,就像在上述方法中使用.mapvalue->{…一样

任何帮助都将不胜感激。

选项1:将Dataframe aka数据集转换为类型化数据集。假设类数据是适合拼花地板文件结构的简单Java bean,您可以使用:

数据集ds=inputDf.asEncoders.Beanda.class; 在此数据集上,您可以使用具有类型化访问权限的映射函数:

数据集ds2=ds.map d->d.getA,Encoders.STRING; 在本例中,我假设类数据有一个名为字符串类型的属性

选项2:不需要额外类的另一个选项是直接在map调用中使用Row对象:

数据集ds3=inputDf.mapr->r.getString0,Encoders.STRING; 同样,我假设第一列是字符串。

选项1:将Dataframe aka数据集转换为类型化数据集。假设类数据是适合拼花地板文件结构的简单Java bean,则可以使用:

数据集ds=inputDf.asEncoders.Beanda.class; 在此数据集上,您可以使用具有类型化访问权限的映射函数:

数据集ds2=ds.map d->d.getA,Encoders.STRING; 在本例中,我假设类数据有一个名为字符串类型的属性

选项2:不需要额外类的另一个选项是直接在map调用中使用Row对象:

数据集ds3=inputDf.mapr->r.getString0,Encoders.STRING; 同样,我假设第一列是一个字符串