我有一个要求,我的Map应该读取一个大的hdfs文本文件,并将其作为“text\u file\u name text\u file\u contents”写入序列文件key:value pair 在一条线上。
然后,我的Map程序将这个序列文件的路径发送到reducer。
目前我正在做的是:
读取文本文件中的所有行,并将它们一直附加到text()变量(例如“contents”)。
读取完整个文本文件后,将“内容”写入序列文件
但是,我不确定text()是否能够存储一个大文件。因此,我们要执行以下操作:
从文本文件中读取一行
使用(writer.append(key,value)将其写入序列文件,其中“writer”是sequencefile.writer
执行上述操作,直到整个文本文件被写入。
这种方法的问题是,它用我正在写入序列文件的每一行写入“key”。
所以,我只想知道,
如果text()可以存储任何大小的文件,如果我继续附加它?
如何避免在writer.append()中除第一次写入外的所有写入中都写入“key”?
不能使用writer.appendraw()。我没有得到关于这个函数的足够的文档。
1条答案
按热度按时间vdgimpew1#
回答您的问题:
text()最多可存储2gb。
您可以通过编写nullwritable或将key.ignore设置为false来避免编写密钥。
但是当你第一次使用第二种方法时,你也不能写你的密钥。所以更好的利用
NullWritable