Flink: как реализовать TypeInformation без фактического количества столбцов в CSV - PullRequest
0 голосов
/ 10 октября 2018

Я читаю CSV-файл через Flink.Файл CSV имеет определенное количество столбцов.

Я определил

            RowCsvInputFormat format = new RowCsvInputFormat(filePath, 
            new TypeInformation[]{  
            BasicTypeInfo.STRING_TYPE_INFO,
            BasicTypeInfo.STRING_TYPE_INFO,
            BasicTypeInfo.STRING_TYPE_INFO,
            BasicTypeInfo.STRING_TYPE_INFO
    });

Код работает нормально, если в файле все строки имеют правильные 4 столбца.

IЯ хочу обработать сценарий, когда несколько строк в файле не имеют 4 столбца ИЛИ в нескольких строках есть другие проблемы.

Как я могу добиться этого в Flink.

1 Ответ

0 голосов
/ 27 октября 2018

Если вы посмотрите здесь на спецификации википедии или rfc4180 , кажется, что файлы CSV должны содержать только строки с одинаковым количеством столбцов.Поэтому имеет смысл, что RowCsvInputFormat не будет поддерживать это.

Вы можете прочитать файлы, используя readTextFile (path) , а затем в операторе flatMap() проанализировать строки в объекте Row (илиигнорировать, если есть проблемы подряд)

env.readTextFile(params.get("input"))
   .flatMap(someCsvRowParseFunction())
...