每次我在现有数据上运行胶水爬虫时,它都会将 Serde 序列化库更改为LazySimpleSerDe
,它不能正确分类(例如,对于带逗号的引用字段)
然后,我需要手动编辑 Glue 目录中的表格详细信息以将其更改为org.apache.hadoop.hive.serde2.OpenCSVSerde
.
我试过制作自己的 csv 分类器,但这没有帮助。
如何让爬虫为生成或更新的表指定特定的序列化库?
每次我在现有数据上运行胶水爬虫时,它都会将 Serde 序列化库更改为LazySimpleSerDe
,它不能正确分类(例如,对于带逗号的引用字段)
然后,我需要手动编辑 Glue 目录中的表格详细信息以将其更改为org.apache.hadoop.hive.serde2.OpenCSVSerde
.
我试过制作自己的 csv 分类器,但这没有帮助。
如何让爬虫为生成或更新的表指定特定的序列化库?
您目前无法在 Glue Crawler 中指定 SerDe,但这里有一个解决方法...
使用以下配置创建一个 Glue Crawler。
启用“仅添加新列”- 这会在发现新列时添加它们,但不会删除或更改数据目录中现有列的类型
启用“使用表中的元数据更新所有新的和现有的分区” - 此选项从其父表继承元数据属性,例如它们的分类、输入格式、输出格式、SerDe 信息和架构。对表中这些属性的任何更改都会传播到其分区。
运行爬虫创建表,它将创建一个带有“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”的表 - 将其编辑为“org.apache.hadoop.hive.serde2.OpenCSVSerde”。
重新运行爬虫。
如果在爬虫重新运行时添加了新分区,它也将使用“org.apache.hadoop.hive.serde2.OpenCSVSerde”创建。
您现在应该有一个设置为 org.apache.hadoop.hive.serde2.OpenCSVSerde 并且不会重置的表。