AWS Glue - 替换包含“.”的字段名称和 ”_”
AWS Glue - Replacing field names containing "." with "_"
我正在尝试替换所有带有“.”的字段。在字段名称内改为“_”。
这是我的:
def apply_renaming_mapping(df):
"""Given a dynamic data frame, if the field contains ., replace with _"""
# construct renaming mapping for ApplyMapping
mappings = list()
# for field in df.schema.fields:
for name, dtpye in df.dtypes:
if '.' in name:
mappings.append((name, dtype, name.replace('.', '_'), dtype))
# apply mapping
reanmed= ApplyMapping(frame=df, mappings=mappings)
return renamed
但我想我遗漏了一些部分。不断收到以下错误:
在 relationalize_and_write 重命名 = apply_renaming_mapping(m_df.toDF()) 文件
apply_renaming_mapping reanmed= ApplyMapping(frame=df, mappings=mappings) TypeError: ApplyMapping() takes no arguments 在处理上述异常的过程中,发生了另一个异常:Traceback (most recent call last):
我做错了什么?
回答这个问题:
- 如果是动态帧,转换为数据帧。
- 使用df.columns替换列
- 转换回动态框架。
这是我在 ETL 中使用的一个函数,可一步重命名列。参数是 DataFrame 和像 {'old_name_1':'new_name_1'}
这样的字典
def rename_dataframe_columns(df, old_new_column_names):
if isinstance(old_new_column_names, dict):
for old_name, new_name in old_new_column_names.items():
df = df.withColumnRenamed(old_name, new_name)
return df
raise ValueError("'old_new_column_names' should be a dict, like {'old_name_1':'new_name_1'}")
一个简单的 for 在 df.columns 上就足以创建字典。
我正在尝试替换所有带有“.”的字段。在字段名称内改为“_”。
这是我的:
def apply_renaming_mapping(df):
"""Given a dynamic data frame, if the field contains ., replace with _"""
# construct renaming mapping for ApplyMapping
mappings = list()
# for field in df.schema.fields:
for name, dtpye in df.dtypes:
if '.' in name:
mappings.append((name, dtype, name.replace('.', '_'), dtype))
# apply mapping
reanmed= ApplyMapping(frame=df, mappings=mappings)
return renamed
但我想我遗漏了一些部分。不断收到以下错误: 在 relationalize_and_write 重命名 = apply_renaming_mapping(m_df.toDF()) 文件 apply_renaming_mapping reanmed= ApplyMapping(frame=df, mappings=mappings) TypeError: ApplyMapping() takes no arguments 在处理上述异常的过程中,发生了另一个异常:Traceback (most recent call last):
我做错了什么?
回答这个问题:
- 如果是动态帧,转换为数据帧。
- 使用df.columns替换列
- 转换回动态框架。
这是我在 ETL 中使用的一个函数,可一步重命名列。参数是 DataFrame 和像 {'old_name_1':'new_name_1'}
这样的字典def rename_dataframe_columns(df, old_new_column_names):
if isinstance(old_new_column_names, dict):
for old_name, new_name in old_new_column_names.items():
df = df.withColumnRenamed(old_name, new_name)
return df
raise ValueError("'old_new_column_names' should be a dict, like {'old_name_1':'new_name_1'}")
一个简单的 for 在 df.columns 上就足以创建字典。