AWS Glue不会重命名字段:

时间:2018-07-19 14:39:53

标签: aws-glue

我对此不满意,但是我敢肯定,这是我所忽略的显而易见的事情。

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

## Go out and get the data we need ##
df = glueContext.create_dynamic_frame.from_catalog(database = "emails", table_name = "contactinfo", redshift_tmp_dir = args["TempDir"], transformation_ctx = "<transformation_ctx>")


df2 = df.toDF().show()
df2 = RenameField(df2, "`AccountId`","AcctNumber") # This is the line causing the error
df2 = RenameField(df2, "`id`", "CampMemId")
df2.show()  

AWS Glue引发的错误如下:

 TypeError: object() takes no parameters

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您可以检查“ toDF()”行吗?我看到文档提到RenameField可在DynamicFrame上使用吗?认为您应该在DynamicFrame“ df”上应用RenameField吗?

此外,我认为这里不需要“`”,因为该文档提到,仅当所引用的字段名称中包含点号时才需要波浪号(see this link please)。我没有使用RenameField,也许您可​​以在最后检查一下。

答案 1 :(得分:0)

转换之前

df2 = df.toDF()

renamedFrame = df.rename_field("original name", "new name")

或者您的情况

df.printSchema()

*尝试使用原始名称中的反斜杠(`)

renamedFrame = df.rename_field("AccountId","AcctNumber")
df2 = renamedFrame.toDF()
df2.printSchema()

参考:Step 4 Filter the data they rename some fields.

答案 2 :(得分:-1)

您是否在AccountId中尝试不使用`。 例如

df2 = RenameField(df2, "AccountId","AcctNumber")
仅当列名中包含点时才需要

`