Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink flink如何将JDBCInputFormat的结果转换为元组类型的数据集_Apache Flink - Fatal编程技术网

Apache flink flink如何将JDBCInputFormat的结果转换为元组类型的数据集

Apache flink flink如何将JDBCInputFormat的结果转换为元组类型的数据集,apache-flink,Apache Flink,我使用以下代码从jdbc获取数据: DataSet dbData = env.createInput( JDBCInputFormat.buildJDBCInputFormat() .setDrivername(bdpService.getDriver(dataSource)) .setDB

我使用以下代码从jdbc获取数据:

DataSet dbData =
                env.createInput(
                        JDBCInputFormat.buildJDBCInputFormat()
                                .setDrivername(bdpService.getDriver(dataSource))
                                .setDBUrl(dbUrl)
                                .setQuery(sql)
                                .setUsername(dataSource.getUsername())
                                .setPassword(dataSource.getPassword())
                                .setRowTypeInfo(new RowTypeInfo(getTypes(transInfo)))
                                .finish(), getTypes(transInfo));
然后我想对数据集进行元组类型的操作,比如groupBy等。 但是它是Row类型的,我如何转换它,或者以任何其他方式实现从jdbc获取数据到数据集类型的转换


非常感谢。

我按如下方式解决了这个问题:

public static class RowToTupleMapper implements ResultTypeQueryable, MapFunction<Row, Tuple>{
    private Class tupleClass;
    private TypeInformation[] typeInformations;

    public RowToTupleMapper(Class tupleClass, TypeInformation[] typeInformations){
        this.tupleClass = tupleClass;
        this.typeInformations = typeInformations;
    }

    @Override
    public Tuple map(Row value) throws Exception {
        Tuple tuple = (Tuple)tupleClass.getDeclaredConstructor().newInstance();
        for (int i = 0; i < value.getArity(); i++) {
            Object obj = value.getField(i);
            tuple.setField(obj, i);
        }
        return tuple;
    }

    @Override
    public TypeInformation getProducedType() {
        return new TupleTypeInfo(typeInformations);
    }
}
公共静态类RowToTupleMapper实现ResultTypeQueryable、MapFunction{
私有类元组;
私有类型信息[]类型信息;
公共RowToTupleMapper(类tupleClass,类型信息[]类型信息){
this.tupleClass=tupleClass;
this.typeInformations=类型信息;
}
@凌驾
公共元组映射(行值)引发异常{
Tuple Tuple=(Tuple)tupleClass.getDeclaredConstructor().newInstance();
for(int i=0;i
使用以下帮助器类:

final String tupleClassName = "org.apache.flink.api.java.tuple.Tuple" + transInfo.getSelects().size();
final Class tupleClass = Class.forName(tupleClassName);
DataSet<Tuple> ret = dbData.map(new RowToTupleMapper(tupleClass, typeInformations));
final String tupleClassName=“org.apache.flink.api.java.tuple.tuple”+transInfo.getSelects().size();
最终类tupleClass=Class.forName(tupleClassName);
DataSet ret=dbData.map(新的RowToTupleMapper(tupleClass,typeInformations));