首页 > 解决方案 > MapPartitionFunction 返回空值

问题描述

我正在使用 java 火花。在这里,我正在从 hdfs 读取数据集,然后对其应用 mapPartition。在调用函数结束时,我可以看到输出行具有未收集到我的 df2 数据集中的值。下面是我的代码。

主要方法

Dataset<Row> df = readDataFrame();
        df.show();
Dataset<Row> df2 = df.mapPartitions(new DataframeProcessMap(getConfig()), RowEncoder.apply(getSchema()));

DataframeProcessMap 类

public class DataframeProcessMap implements MapPartitionsFunction<Row,Row> {
    private final Config config;

    public  DataframeProcessMap(Config config){
        this.config=config;
    }

    @Override
    public Iterator<Row> call(Iterator<Row> iterator) throws Exception{
        List<Row> outputRows = new ArrayList();
        while (iterator.hasNext()){
            Row inputRow = iterator.next();
            ArrayList output = projectAndRenameColumn(inputRow);
            Row outputRow = DataIntegrationUtils.getRow(output.toArray(), getSchema());
            System.out.println(outputRow);
            outputRows.add(outputRow);
        }
        return outputRows.iterator();
    }
    public ArrayList projectAndRenameColumn(Row inputData){
    ...
    // Some processing
    }
    public StructType getSchema(){
    ...
    //schema from config file
    }

}

getSchema() 也存在于与此完全相同的主类中。

在调用方法 System.out.println(outputRow); 给我正确的输出。但是,我在 df2 中得到空行。为什么?

标签: javaapache-sparkdata-partitioning

解决方案


推荐阅读