aws-glue - 如何以编程方式重命名 AWS Glue 目录中的列名
问题描述
我已经使用爬虫为 25 个表填充了 Glue 目录。现在表名都有通用的列名。有没有更好的方法来以编程方式重命名列而不是一一手动进行?我也不想用不同的列名再次写入相同的数据。我遇到了 RenameField 类,但不确定它是只是重命名目录还是再次写入整个数据?
解决方案
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。
推荐阅读
- javascript - 如何使用来自另一个 js 类 n react-native 的键从 const 中获取值?
- html - 导航栏消失 - Angular 7
- webassembly - 学习 WebAssembly Uncaught (in promise) TypeError: m._init is not a function
- swift - 不支持的 IOSurface 格式:0x26424741 在场景包中使用 twilio 视频
- c# - C# - 将 datagridview 导出到 excel 中,C# 中带有前导零
- java-8 - 注意能够从 List 中获取 Distinct int[]
- amazon-web-services - 如何使用 AWS Lambda ( Python) 调用步进函数
- ruby-on-rails - 如何对收藏进行排序?
- ios - UIViewController 在模态演示后更改尺寸
- android - 我需要学习什么来编写像 Snapchat 这样的应用程序?