Apache Spark-Map函数在Java中返回空数据集

时间:2018-07-27 08:45:44

标签: apache-spark apache-spark-dataset apache-spark-2.0

我的代码:

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>会正确显示所有具有适当值的列和行,但是 validatedDS Dataset<Row>仅显示一栏为空值。

*预期输出:*

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

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

1 个答案:

答案 0 :(得分:0)

Encoders.bean适用于Bean类。 Row不是其中之一(不会为特定字段定义setter和getter,而只是通用getter)。

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

例如查看Encoder for Row Type Spark Datasets