Hadoop/Hive新手在这里.我正在尝试使用以Hive自定义基于文本的格式存储的数据.我的理解是您可以编写自FileFormat定义SerDe类或自定义类来执行此操作.是这样的,还是我误解了?什么是关于选择何时选择的一般指导原则?谢谢!
rad*_*imd 13
我想到了.毕竟我没有写一个serde,写了一个org.apache.hadoop.mapred.TextInputFormat返回自定义RecordReader(implements org.apache.hadoop.mapred.RecordReader<K, V>)的自定义InputFormat(extends ).RecordReader实现逻辑以读取和解析我的文件并返回制表符分隔的行.
随后我宣布我的桌子为
create table t2 (
field1 string,
..
fieldNN float)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT 'namespace.CustomFileInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
Run Code Online (Sandbox Code Playgroud)
这使用原生SerDe.此外,在使用自定义输入格式时需要指定输出格式,因此我选择其中一种内置输出格式.
小智 7
基本上,您需要了解何时修改SerDe以及何时修改fileformat的区别.
官方文档:Hive SerDe
什么是SerDe?1.SerDe是"Serializer and Deserializer"的简称.2.Hive使用SerDe(和FileFormat)来读写表行.3.HDFS文件 - > InputFileFormat - > - > Deserializer - > Row对象4.Row对象 - > Serializer - > - > OutputFileFormat - > HDFS文件
所以,第3和第4点显然是在推断出差异.当您想要以与平常不同的方式读取记录时,您需要具有自定义文件格式(输入/输出)(其中记录由'\n'分隔).当您想要以自定义方式解释读取记录时,您需要自定义SerDe.
我们来看一个常用格式JSON的例子.
场景1:假设您有一个输入json文件,其中一行包含一个json记录.因此,现在您只需要自定义Serde以您想要的方式解释读取记录.不需要自定义输出格式,因为1行将是1条记录.
方案2:现在,如果您有您的一个JSON记录跨越多行的输入文件和你想读它,因为它是那么你应该先写一个自定义的输入格式在1个JSON记录读取,然后该读JSON记录将转到Custom SerDe.
| 归档时间: |
|
| 查看次数: |
15055 次 |
| 最近记录: |