我使用flink将csv文件加载到pojos数据集,通过scala案例类定义,使用readCsvFile方法,我遇到了一个无法解决的问题。
当在csv中有一个记录在其任何字段中都有一些格式错误时它会被丢弃,我认为保留这些记录的唯一方法是将它们全部键入String并自己进行验证。
问题是如果分隔符后面的最后一个字段为空,默认情况下会丢弃该记录,我认为因为它被认为没有预期的字段数,所以不可能处理这个记录错误,而如果在任何先前字段中的空值没有问题。
实施例
FIELD1 |科研成果|字段3
一个||Ç
A | B |
在此示例中,readCsvFile方法返回第一个记录,但第二个记录不返回。
这种行为是对的吗?还有什么可以四处走动来获取记录吗? 感谢
答案 0 :(得分:0)
Flink中的案例类和元组不支持空值。因此,如果空字段不是String,则a||c
无效。我建议在这种情况下使用RowCsvInputFormat
。它支持空值,通用行可以转换为以下映射运算符中的任何其他类。
答案 1 :(得分:0)
问题是,正如你所说,如果字段是一个字符串,那么即使它是空的,该记录也应该是有效的,并且当空值在最后一个字段中时,这不会发生。行为因位置而异。
我会按照你的建议尝试使用RowCsvInputFormat。 感谢