TextInputFormat与HiveIgnoreKeyTextOutputFormat

时间:2019-03-16 12:19:14

标签: apache-spark hadoop hive hiveql

我只是从Hive开始,我对输入/输出格式有疑问。我正在使用OpenCSVSerde Serde,但我不明白为什么对于文本文件,输入格式为org.apache.hadoop.mapred.TextInputFormat,而输出格式为org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

我已经阅读了question,但是我仍然不清楚为什么输入/输出格式不同。这基本上不是说您要存储添加到该表中的数据的方式与从表中读取的数据不同吗?

无论如何,我们将不胜感激

1 个答案:

答案 0 :(得分:0)

在TextInputFormat中,键是文件中的位置(长数据类型),而值是文本行。当程序读取文件时,它可能会使用密钥进行随机读取,其中在使用HiveIgnoreKeyTextOutputFormat写入文本数据时,保持位置没有任何价值,因为它没有意义。

因此,使用HiveIgnoreKeyTextOutputFormat将键作为null传递给下划线的RecordWriter。当RecordWriter收到key为null时,它将忽略key并仅使用行分隔符写入该值。否则,RecordWriter将键,然后是定界符,然后是value,最后是行分隔符。