我正在处理一个大 CSV 文件,该文件使用 TAB 来分隔一行中的字段。问题是某些字段之间有多个 TAB 字符。我不想替换字符,因为文件中有大约一百万行。我试过下面的代码,但它不起作用,它显然没有找到分隔符,也没有给我任何输出。
如果我使用 \ t 作为分隔符,我会得到一个输出,但多个 TAB 字符是个问题。
DataSet<Tuple7<String, String, String, String, String, String, String>> ds = env
.readCsvFile("../csvResources/1.CSV")
.fieldDelimiter("\t+")
.ignoreInvalidLines()
.types(String.class, String.class, String.class, String.class, String.class, String.class, String.class)
.project(0, 1, 2, 3, 4, 5, 6);
非常感谢您的帮助。
答案 0 :(得分:1)
目前Flink的内置CsvInputFormat
不支持此功能。它会将每个选项卡解释为字段分隔符,并假设某些字段为空。
有两种方法可以解决此问题。
CsvInputFormat
)。您基本上需要更改负责将记录拆分为单个字段的逻辑。当您观察字段分隔符(选项卡)时,您需要检查下一个字符是否也是字段分隔符,而不是解析下一个字段。TextInputFormat
)并解析每一行后续MapFunction
。我建议采用第二种方法。它更易于实施和维护。