使用胶水保存为镶木地板文件时会修改数据帧标头

Posted

技术标签:

【中文标题】使用胶水保存为镶木地板文件时会修改数据帧标头【英文标题】:Dataframe headers get modified on saving as parquet file using glue 【发布时间】:2021-08-12 03:43:13 【问题描述】:

我正在使用以下代码将带有标题的数据帧按分区写入 s3:

df_dynamic = DynamicFrame.fromDF(
    df_columned,
    glue_context,
    "temp_ctx"
)

print("\nUploading parquet to " + destination_path)

glue_context.write_dynamic_frame.from_options(
    frame=df_dynamic,
    connection_type="s3",
    connection_options=
        "path": destination_path,
        "partitionKeys" : ["partition_id"]
    ,
    format_options=
        "header":"true"
    ,
    format="glueparquet"
)

创建文件后,我看到我在列标题后添加了#1、#2。 示例:如果我的列名是“Doc Data”,它将被转换为 Doc_Date#1

我认为这是一种保存数据的镶木地板方式。 然后,当我尝试使用下面的代码从相同的文件中读取时,我的标题不再相同。现在它们以 Doc_Date#1 的形式出现。我该如何解决这个问题?

str_folder_path = str.format(
    _S3_PATH_FORMAT,
    args['BUCKET_NAME'],
    str_relative_path
)

df_grouped = glue_context.create_dynamic_frame.from_options(
    "s3", 
    
        'paths': [str_folder_path], 
        'recurse':True, 
        'groupFiles': 'inPartition', 
        'groupSize': '1048576'
    ,
    format_options=
        "header":"true"
    , 
    format="parquet"
)

return df_grouped.toDF()

【问题讨论】:

【参考方案1】:

问题已解决!!

问题是我的列名中有空格。一旦我用下划线(_)替换它们,问题就解决了。

【讨论】:

以上是关于使用胶水保存为镶木地板文件时会修改数据帧标头的主要内容,如果未能解决你的问题,请参考以下文章

转换为镶木地板的 csv 文件将“e0”添加到值的末尾

使用python将csv转换为镶木地板文件

将 avro 转换为镶木地板(也许使用 hive?)

在 PySpark 中为镶木地板文件过滤日期时间范围和时区

如何将 csv 文件转换为镶木地板

Hive/Bigsql Pandas 将浮点数转换为整数,使用 pyarrow 将空值转换为镶木地板文件