使用AWS Glue Crawler指定一个SerDe序列化库

9
每次我在现有数据上运行粘合剂爬虫时,它都会将 Serde 序列化库更改为 LazySimpleSerDe,这导致分类不正确(例如对于带逗号的引用字段)。

enter image description here

我需要手动编辑Glue目录中的表细节,将其更改为org.apache.hadoop.hive.serde2.OpenCSVSerde
我尝试过制作自己的csv分类器,但没有帮助。
如何让爬虫指定用于生成或更新表的特定序列化库?

你能确认一下你的数据里是否有双引号吗?如果是的话,当使用自定义CSV分类器时,爬虫应该使用OpenCSVSerde填充表格。你能分享一下你所使用的自定义CSV分类器配置吗?在我的情况下,爬虫使用OpenCSVSerde填充了表格。 - Prabhakar Reddy
@Prabhakar,数据确实有一些行带有双引号,但并非全部。其中包含换行符的行是用双引号括起来的。您认为将所有行都用双引号括起来编辑数据是一个解决方案吗?自定义分类器只是使用Glue Web界面创建的;似乎没有太多的定制选项。 - Luigi Plinge
@RhysJonesa.k.a.Luigi,你有没有找到解决这个问题的方法,除了手动或编程方式更新表定义? - chandu
@chandu 这不是一个解决方案,但我们关闭了粘合爬虫的自动运行,因为模式更改很少。如果你找到了解决方案,请告诉我! - Luigi Plinge
3个回答

8

目前在 Glue Crawler 中无法指定 SerDe,但以下是一种解决方法...

  1. 创建具有以下配置的 Glue Crawler。

    启用“仅添加新列” - 这将根据发现的列添加新列,但不会删除或更改数据目录中现有列的类型。

    启用“使用表中的元数据更新所有新建和现有分区” - 此选项从其父表继承元数据属性,例如它们的分类、输入格式、输出格式、SerDe 信息和模式。对表中这些属性的任何更改都会传播到其分区。

  2. 运行爬虫程序以创建表,它将创建一个具有“org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe”的表 - 将其编辑为“org.apache.hadoop.hive.serde2.OpenCSVSerde”。

  3. 重新运行爬虫程序。

  4. 如果在爬取器重新运行时添加了新分区,则还将使用“org.apache.hadoop.hive.serde2.OpenCSVSerde”创建该分区。

  5. 现在应该有一个设置为 org.apache.hadoop.hive.serde2.OpenCSVSerde 并且不会重置的表。


2
谢谢!在我的情况下,我还不得不在第2步和第3步之间删除所有表字段,以便出于某种原因它能够正确检测到字段。 - crea1
2
我遇到了这个问题...在CSV源文件中,所有文本都有双引号。爬虫给我提供了一个适当的表格,但是从Athena和Redshift查询时,字符串中显示了双引号。解决方法解决了问题,我可以编辑表格并设置Serde类型,查询就不会显示双引号了。但是,由于表格是动态创建的,我需要将其作为Glue Crawler的属性。我的所有代码都是通过Terraform部署的。Glue是否已经有解决方案,以便它将创建具有正确格式的表格?(例如,删除双引号!)。 - Doug P
截至2021年6月,似乎不存在在爬虫级别指定序列化库的选项。 - swuk
1
这个解决方法对我有效(我不必像@crea1所提到的那样删除表字段)。在此补充一些注释:在第2步中,如果您使用的分隔符不是“,”,请不要忘记在“Serde参数”下添加“separatorChar”。第3步的目的是更新所有现有分区,使它们都遵循表定义中的serde设置。截至2021年11月6日,在爬虫级别指定序列化库的选项似乎不存在。 - Zach
两年半过去了,即使在Glue 3中也仍然不存在该选项。解决方法不适合自动化:我无法在生产环境中手动编辑数十个爬虫。 - Jérémy
1
@Jérémy,这正是我决定停止使用网络爬虫的原因。它基本上是一个不可维护的不一致的黑匣子。 - Zach

2
AWS文档中建议使用“更新表API”(Update Table API)以编程方式修改表格,这仍然是一个笨拙的解决方案,用于处理使用CSV分类器的Glue爬虫遇到的问题。更加让人沮丧的是,每次重新运行爬虫时,它似乎会覆盖表格Serde序列化库值,将其重置为“LazySimpleSerDe”。

0
1. 运行爬虫。 2. 进入Glue目录中的表格。 3. 选择表格并点击编辑表格详情。 4. 在那里,您会找到Serde Lib选项,将其更改为org.apache.hadoop.hive.serde2.OpenCSVSerde,然后只需刷新Athena屏幕即可应用新的Serde。

1
如果你看一下问题,那就是我已经做过的。 - Luigi Plinge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接