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> правильно отображается со всеми столбцами и строками с правильными значениями, однако validatedDS Dataset<Row> отображается только с одним столбцом с пустыми значениями.

*Ожидаемый результат: *

validatedDS также должен отображать те же значения, что и набор данных finalJoined, потому что я выполняю проверку только внутри функции карты и не изменяю сам набор данных.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.


person Raj    schedule 27.07.2018    source источник


Ответы (1)


Encoders.bean предназначен для использования с классами Bean. Row не является одним из них (не определяет сеттеры и геттеры для определенных полей, только общие геттеры).

Чтобы вернуть объект Row, вы должны использовать RowEncoder и предоставить ожидаемую схему вывода.

Проверьте, например, кодировщик для наборов данных Spark типа строки

person user10144153    schedule 27.07.2018