首页 > 解决方案 > Apache Spark - 在java中返回空数据集的映射函数

问题描述

我的代码:

finalJoined.show();

Encoder<Row> rowEncoder = Encoders.bean(Row.class);                             
Dataset<Row> validatedDS = finalJoined.map(row -> validationRowMap(row), rowEncoder);       
validatedDS.show();

地图功能:

public static Row validationRowMap(Row row) {

        //PART-A validateTxn()

        System.out.println("Inside map");
        //System.out.println("Value of CIS_DIVISION is " + row.getString(7));

        //1. CIS_DIVISION
        if ((row.getString(7)) == null || (row.getString(7)).trim().isEmpty()) {
            System.out.println("CIS_DIVISION cannot be blank.");
        }

return row;

}

输出 :

finalJoined Dataset<Row>正确显示所有具有正确值的列和行,但是validDS Dataset<Row>仅显示一列具有空值。

*预期输出:*

validatedDS也应该显示与finalJoined数据集相同的值,因为我只在 map 函数内执行验证,而不是更改数据集本身。

如果您需要更多信息,请告诉我。

标签: apache-sparkapache-spark-datasetapache-spark-2.0

解决方案


Encoders.bean旨在与 Bean 类一起使用。Row不是其中之一(没有为特定字段定义 setter 和 getter,只有通用 getter)。

要返回Row对象,您必须使用RowEncoder并提供预期的输出模式。

检查例如行类型 Spark 数据集的编码器


推荐阅读