我有一个100 tb的文本文件,它有多行记录。我们并没有得到每个记录需要多少行。一个记录的大小可以是5行,另一个可以是6行,另一个可以是4行。不确定每条记录的行大小是否不同。
所以我不能使用默认的textinputformat,我已经编写了自己的inputformat和一个自定义的记录阅读器,但是我的困惑是:当发生拆分时,我不确定每个拆分是否包含完整的记录。记录的某些部分可以放在第1部分,另一部分放在第2部分。但这是错误的。
那么,您能建议如何处理这个场景,以便我保证我的完整记录在一个inputspilt中吗?
提前谢谢-杰
2条答案
按热度按时间bvjxkvbb1#
在您的记录阅读器中,您需要定义一个算法,通过该算法可以:
确定你的手机是否在录音中
如何扫描该记录并读取下一个完整记录
这类似于textinputformat行读取器已经做的事情—当输入拆分有偏移量时,行记录读取器从该偏移量向前扫描它找到的第一个换行,然后读取该换行后的下一个记录作为它将发出的第一个记录。与此相关的是,如果块长度小于eof,行记录读取器将到达并超过块的末尾,以查找当前记录的行终止字符。
bfnvny8b2#
您需要知道这些记录是否确实由一些已知的字符序列分隔。
如果你知道这一点,你可以设置
textinputformat.record.delimiter
config参数来分隔记录。如果记录不是字符分隔的,您将需要一些额外的逻辑,例如,计算已知数量的字段(如果有已知数量的字段)并将其表示为记录。这通常会使事情变得更复杂,容易出错,而且速度很慢,因为还有很多文本处理正在进行。
尝试确定记录是否有分隔符。或许发布一些记录的简短示例会有所帮助。