如何写Java8火花代码mapFunction? 错误:地图(功能1,编码器)不适用于参数(Ho

2019-10-30 04:56发布

我有一个mapFunction如下

Function1<CompanyInfoRecordNew, CompanyInfoTransformedRecord> mapFunction = ( record ) ->{

        CompanyInfoTransformedRecord  transRec = new CompanyInfoTransformedRecord();
        //popluate 
    return transRec ;
    };

这需要CompanyInfoRecordNew对象并返回CompanyInfoTransformedRecord。

不过,虽然如下调用该

JavaRDD companyInfoTransformedRecord = baseDs.map(mapFunction,comanyInfoTransEncoder);

给错误:

在类型的数据集的方法,图(功能1,编码器)是不适用的参数(功能1,编码器)

这里有什么问题?

代码链接相同的:

https://gist.github.com/BdLearnerr/cbfea1c8471557bb33449f882cc1854a

如何返回从地图功能的列表?

代码中的链接更新

https://gist.github.com/BdLearnerr/cbfea1c8471557bb33449f882cc1854a

第2节:

MapFunction<CompanyInfoRecordNew, List<CompanyInfoTransformedRecord>>  mapFunction = ( record ) ->{

            List<CompanyInfoTransformedRecord>  transRecList = new ArrayList<CompanyInfoTransformedRecord>();

return transRecList ;
}


   Dataset<List<CompanyInfoTransformedRecord>> companyInfoTransformedRecords = baseDs.map(mapFunction, comanyInfoTransEncoder);

//错误

在类型的数据集的方法,图(功能1,编码器)是不适用的参数MapFunction>,编码器)

companyInfoTransformedRecord.show();

无法做到因错误显示,如何让节目()工作。 ??

Answer 1:

你的进口是错误的,而不是这样的:

import org.apache.calcite.linq4j.function.Function1;

用这个

org.apache.spark.api.java.function.MapFunction;

baseDs.map(new MapFunction<CompanyInfoRecordNew, CompanyInfoTransformedRecord>() {...}, encoder);


Answer 2:

要利用对象的对象,并返回列表,我们需要如下而是使用地图的flatmap

FlatMapFunction<Original, Derived>  flatMapFunction = ( record ) ->{

            List<Derived>  transRecList = new ArrayList<Derived>();

            Derived  transRec = new Derived();

            transRecList.add(transRec);

            Derived  transRec2 = new Derived();
                transRecList.add(transRec2);

            return (Iterator<Derived>) transRecList.iterator();
        };

数据集Deriveds = baseDs.flatMap(flatMapFunction,comanyInfoTransEncoder);



文章来源: How to write a mapFunction in Java8 in spark code ? Error: map(Function1, Encoder) not applicable for the arguments