【问题标题】:Set missing column values to a default using AWS Glue Jobs使用 AWS Glue 作业将缺失的列值设置为默认值
【发布时间】:2019-07-19 20:46:17
【问题描述】:

我正在尝试使用 Glue 将数据集从 dynamodb 提取到 s3。在此过程中,我想选择一些列,然后为所有缺少值的行/列设置默认值。

我目前的尝试是使用“地图”功能,但它似乎没有调用我的方法。

这是我所拥有的:

def SetDefaults(rec):
    print("checking record")
    for col in rec:
        if not rec[col]:
            rec[col] = "missing"
    return rec

## Read raw(source) data from target DynamoDB 
raw_data_dyf = glueContext.create_dynamic_frame_from_options("dynamodb", {"dynamodb.input.tableName" : my_dynamodb_table, "dynamodb.throughput.read.percent" : "0.50" } )

## Get the necessary columns  
selected_data_dyf = ApplyMapping.apply(frame = raw_data_dyf, mappings = mappingList)

## get rid of null values
mapped_dyF = Map.apply(frame=selected_data_dyf, f=SetDefaults)

## write it all out as a csv
datasink = glueContext.write_dynamic_frame.from_options(frame=mapped_dyF , connection_type="s3", connection_options={ "path": my_train_data }, format="csv", format_options = {"writeHeader": False , "quoteChar": "-1" })

我的ApplyMapping.apply 调用是正确的,其中mappingList 是由一堆定义的:

mappingList.append(('gsaid', 'bigint', 'gsaid', 'bigint'))
mappingList.append(('objectid', 'bigint', 'objectid', 'bigint'))
mappingList.append(('objecttype', 'bigint', 'objecttype', 'bigint'))

我没有错误,一切都运行完成。我的数据都在 s3 中,但是还有很多空值,而不是我想要的“缺失”条目。

“检查记录”打印语句永远不会打印出来。我在这里错过了什么?

【问题讨论】:

    标签: amazon-web-services pyspark apache-zeppelin aws-glue


    【解决方案1】:

    替代解决方案:

    1. 将 DynamicFrame 转换为 Spark DataFrame
    2. 使用 DataFrame 的 fillna() 方法填充空值
    3. 将 DataFrame 转换回 DynamicFrame

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多