【发布时间】:2016-03-04 16:06:34
【问题描述】:
我有一个 mapreduce 作业,它读取文本文件并从中创建 parquet 文件,同时写入简单的文本文件作为输出。我为此使用了多种输出格式。但是可以为一次写入 parquet 文件或文本文件初始化多个输出格式对象。我需要在单个映射器中同时容纳两者。非常感谢任何帮助。
【问题讨论】:
我有一个 mapreduce 作业,它读取文本文件并从中创建 parquet 文件,同时写入简单的文本文件作为输出。我为此使用了多种输出格式。但是可以为一次写入 parquet 文件或文本文件初始化多个输出格式对象。我需要在单个映射器中同时容纳两者。非常感谢任何帮助。
【问题讨论】:
不确定这是最好的方法,但您可以在映射器的 setup() 方法中初始化一个 StringBuilder,在 map() 方法期间将所有文本值附加到它,然后在 cleanup 方法中将其写入磁盘。取决于文本输出的大小以及是否有足够的内存。这样,文本文件根本不需要是映射器输出,您的映射器输出只能是 Parquet 数据。
您可以使用context.getInputSplit() 或类似于文本输出文件名的名称,以便每个映射器输出一个唯一的文件名,并且您知道哪个输出对应哪个输入。
【讨论】: