如何处理inputsplit的多行记录?

hwazgwia  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(270)

我有一个100 tb的文本文件,它有多行记录。我们并没有得到每个记录需要多少行。一个记录的大小可以是5行,另一个可以是6行,另一个可以是4行。不确定每条记录的行大小是否不同。
所以我不能使用默认的textinputformat,我已经编写了自己的inputformat和一个自定义的记录阅读器,但是我的困惑是:当发生拆分时,我不确定每个拆分是否包含完整的记录。记录的某些部分可以放在第1部分,另一部分放在第2部分。但这是错误的。
那么,您能建议如何处理这个场景,以便我保证我的完整记录在一个inputspilt中吗?
提前谢谢-杰

bvjxkvbb

bvjxkvbb1#

在您的记录阅读器中,您需要定义一个算法,通过该算法可以:
确定你的手机是否在录音中
如何扫描该记录并读取下一个完整记录
这类似于textinputformat行读取器已经做的事情—当输入拆分有偏移量时,行记录读取器从该偏移量向前扫描它找到的第一个换行,然后读取该换行后的下一个记录作为它将发出的第一个记录。与此相关的是,如果块长度小于eof,行记录读取器将到达并超过块的末尾,以查找当前记录的行终止字符。

bfnvny8b

bfnvny8b2#

您需要知道这些记录是否确实由一些已知的字符序列分隔。
如果你知道这一点,你可以设置 textinputformat.record.delimiter config参数来分隔记录。
如果记录不是字符分隔的,您将需要一些额外的逻辑,例如,计算已知数量的字段(如果有已知数量的字段)并将其表示为记录。这通常会使事情变得更复杂,容易出错,而且速度很慢,因为还有很多文本处理正在进行。
尝试确定记录是否有分隔符。或许发布一些记录的简短示例会有所帮助。

相关问题