Apache flink scala readCsvFile行为
我正在使用flink将csv文件加载到POJO数据集中,该数据集是通过scala case类使用readCsvFile方法定义的,我有一个无法解决的问题。Apache flink scala readCsvFile行为,apache-flink,Apache Flink,我正在使用flink将csv文件加载到POJO数据集中,该数据集是通过scala case类使用readCsvFile方法定义的,我有一个无法解决的问题。 在csv中,如果某个记录的任何字段中存在格式错误,则该记录将被丢弃,我认为保存这些记录的唯一方法是将其全部键入字符串,然后自己进行验证。 问题是,如果分隔符后面的最后一个字段为空,则默认情况下会丢弃该记录,我认为这是因为它被视为没有预期的字段数,并且不可能处理此记录错误,而如果之前的任何字段中的空值为空,则没有问题 示例 字段1 |字段2 |
在csv中,如果某个记录的任何字段中存在格式错误,则该记录将被丢弃,我认为保存这些记录的唯一方法是将其全部键入字符串,然后自己进行验证。
问题是,如果分隔符后面的最后一个字段为空,则默认情况下会丢弃该记录,我认为这是因为它被视为没有预期的字段数,并且不可能处理此记录错误,而如果之前的任何字段中的空值为空,则没有问题 示例
字段1 |字段2 |字段3
a|c
a | b | 在本例中,第一条记录由readCsvFile方法返回,而不是第二条 这种行为正确吗?是否有人四处走动以获取记录?
谢谢,Flink中的Case类和元组不支持空值。因此,如果空字段不是字符串,
a | | c
无效。在这种情况下,我建议使用RowCsvInputFormat
。它支持空值,并且泛型行可以在下面的映射运算符中转换为任何其他类。问题在于,如您所说,如果字段是字符串,即使记录为空,也应该有效,并且当空值在最后一个字段中时不会发生这种情况。根据位置的不同,行为会有所不同
我还将尝试使用您推荐的RowCsvInputFormat。
谢谢阅读[如何创建一个最小、完整且可验证的示例][1],并相应地编辑您的问题。[1]: