我已经使用搜寻器填充了25个表的Glue目录。现在,表名都具有通用的列名。有什么更好的方法以编程方式重命名这些列,而不是一个个地手动进行重命名?我也不想用不同的列名再次写入相同的数据。我遇到了RenameField类,但不确定是重命名目录还是再次写入整个数据?
答案 0 :(得分:1)
您可以使用boto3 sdk创建表,而不是运行搜寻器。 http://boto3.readthedocs.io/en/latest/reference/services/glue.html#Glue.Client.create_table gum.create_table(DatabaseName =,TableInput =) TableInput参数采用json格式,您可以在其中定义表列名称。
“列”:[ { '名称':'字符串', '类型':'字符串', '注释':'字符串' }, ]
您可以构造'Columns'元素,编写一个python代码以读取源表(s3文件或MySQL表,或者以您的源定义为准) 拥有json后,您可以编写一个python脚本来执行create_table。
a)重命名列。 b)做#1。 c)放下桌子。
response = client.delete_table(
CatalogId='string',
DatabaseName='string',
Name='string'
)
d)创建表格
重命名列
for c in cust_addressDF.columns:
cust_addressDF = cust_addressDF.withColumnRenamed(c , "cust_"+c)
这里cust_addressDF是从Glue DynamicFrame创建的spark DataFrame。这将在运行时为列添加“ cust _”。
我正在处理#1和#3。
答案 1 :(得分:0)
您要重命名目录中的Glue表列名还是重命名Glue代码中Dynamicframe中的列?
答案 2 :(得分:0)
如果您正在运行Glue ETL作业,则可以使用ApplyMapping class重命名列:
# Glue ETL script for python
applymapping1 = ApplyMapping.apply(
frame = datasource0,
mappings = [
("column_1", "string", "column_1", "string"),
("column_2", "string", "column_2", "string"),
("partition_0", "string", "year", "string"),
("partition_1", "string", "month", "string"),
("partition_2", "string", "day", "string"),
("partition_3", "string", "hour", "string")
],
transformation_ctx = "applymapping1")
在上面的示例中,分区0-3重命名为年,月,小时。