我只是从Hive开始,我对输入/输出格式有疑问。我正在使用OpenCSVSerde
serde,但我不明白为什么对于文本文件,输入格式为org.apache.hadoop.mapred.TextInputFormat
,但输出格式为org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
。
我已经阅读了question,但是我仍然不清楚为什么输入/输出格式不同。这基本上不是说您要存储添加到该表中的数据的方式与从表中读取的数据有所不同吗?
无论如何,任何帮助将不胜感激
最佳答案
在TextInputFormat中,键是文件中的位置(长数据类型),而值是文本行。当程序读取文件时,它可能会使用键进行随机读取,其中使用HiveIgnoreKeyTextOutputFormat写入文本数据时,保持位置没有任何值(value),因为它没有意义。
因此,使用HiveIgnoreKeyTextOutputFormat将键作为null传递给下划线的RecordWriter。当RecordWriter收到key为null时,它将忽略key并仅使用行分隔符写入该值。否则,RecordWriter将键,然后是定界符,然后是value,最后是行分隔符。
关于apache-spark - TextInputFormat与HiveIgnoreKeyTextOutputFormat,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55196693/