首页 > 解决方案 > 如何以编程方式重命名 AWS Glue 目录中的列名

问题描述

我已经使用爬虫为 25 个表填充了 Glue 目录。现在表名都有通用的列名。有没有更好的方法来以编程方式重命名列而不是一一手动进行?我也不想用不同的列名再次写入相同的数据。我遇到了 RenameField 类,但不确定它是只是重命名目录还是再次写入整个数据?

标签: aws-glue

解决方案


1.

您可以使用 boto3 sdk 创建表而不是运行爬虫。 http://boto3.readthedocs.io/en/latest/reference/services/glue.html#Glue.Client.create_table glue.create_table(DatabaseName=, TableInput=) TableInput 参数采用 json 格式,您可以在其中定义表格列名。

'列':[ {'名称':'字符串','类型':'字符串','注释':'字符串'},],

您可以构建“列”元素,编写 python 代码来读取源表(s3 文件或 MySQL 表,或者您的源定义)一旦你有了 json,你就可以编写一个 python 脚本来执行 create_table。

2. 如果您已经使用爬虫创建了表定义,另一种方法是获取表的定义。

a) 重命名列。b) 做#1。c) 删除表。

response = client.delete_table(
CatalogId='string',
DatabaseName='string',
Name='string'
                            )

d) 创建表

3. 您可以在 Glue 代码中执行此操作,而无需更改表定义。

重命名列

for c in cust_addressDF.columns:
        cust_addressDF = cust_addressDF.withColumnRenamed(c , "cust_"+c)

这里的 cust_addressDF 是从 Glue DynamicFrame 创建的 spark DataFrame。这将在运行时附加带有“cust_”的列。

我在我的过程中做#1和#3。


推荐阅读