筛选器类 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

筛选器类

通过从满足指定谓词函数的输入 DynamicFrame 中选择记录来生成新的 DynamicFrame

Methods

__call__(帧,f,transformation_ctx="",info=", stageThreshold=0, totalThreshold=0)

通过从满足指定谓词函数的输入 DynamicFrame 中选择记录来返回新的 DynamicFrame 生成。

  • frame – 要将指定的筛选函数应用到的源 DynamicFrame(必需)。

  • f – 要应用于每个 DynamicRecordDynamicFrame。功能必须采用 DynamicRecord 作为其引数,如果 DynamicRecord 符合过滤器要求,如果不符合(要求),则为False。

    DynamicRecord 表示 DynamicFrame。类似于Spark中的一行 DataFrame,例外是它属于自我描述,并且可用于不符合固定框架的数据。

  • transformation_ctx – 用于标识状态信息的唯一字符串(可选)。

  • info – 与转换中的错误关联的字符串(可选)。

  • stageThreshold – 在转换出错之前可能在其中发生的最大错误数(可选;默认值为零)。

  • totalThreshold – 在处理出错之前可能全面发生的最大错误数(可选;默认值为零)。

apply(cls, *args, **kwargs)

继承自 GlueTransform apply

name(cls)

继承自 GlueTransform name (名称)

describeArgs(包括)

继承自 GlueTransform describeArgs

describeReturn(包括)

继承自 GlueTransform describeReturn

describeTransform(包括)

继承自 GlueTransform describeTransform

describeErrors(包括)

继承自 GlueTransform describeErrors

describe(cls)

继承自 GlueTransform describe

AWS Glue Python 示例

此示例使用 Filter 转换和一个简单的 Lambda 函数来筛选示例数据。此处使用的数据集包括从两个 Data.CMS.gov 研究中心: 前100大诊断相关人群住院前瞻性支付系统提供者小结-2011财年),和 2011财年住院患者收费数据.

下载示例数据后,我们修改了它,以在文件末尾引入了几个错误的记录。此修改后的文件位于公共 Amazon S3 桶形 s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv。有关使用此数据集的另一个示例,请参阅 代码示例: 数据准备使用 ResolveChoice、Lambda和 ApplyMapping.

首先,为数据创建一个 DynamicFrame

%pyspark from awsglue.context import GlueContext from awsglue.transforms import * from pyspark.context import SparkContext glueContext = GlueContext(SparkContext.getOrCreate()) dyF = glueContext.create_dynamic_frame.from_options( 's3', {'paths': ['s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv']}, 'csv', {'withHeader': True}) print "Full record count: ", dyF.count() dyF.printSchema()

输出应如下所示:

Full record count: 163065L root |-- DRG Definition: string |-- Provider Id: string |-- Provider Name: string |-- Provider Street Address: string |-- Provider City: string |-- Provider State: string |-- Provider Zip Code: string |-- Hospital Referral Region Description: string |-- Total Discharges: string |-- Average Covered Charges: string |-- Average Total Payments: string |-- Average Medicare Payments: string

接下来,使用 Filter 转换来压缩数据集,仅保留来自加利福尼亚州萨克拉门托或阿拉巴马州蒙哥马利的那些条目。筛选转换适用于任何接受 DynamicRecord 作为输入并在 DynamicRecord 满足筛选要求时返回 True,否则返回 False 的筛选函数。

注意

您可以使用Python点符号访问 DynamicRecord。例如,您可以访问 column_A 字段 dynamic_record_X 为: dynamic_record_X.column_A.

但是,此技术不用于包含除字母数字字符和下划线之外的任何内容的字段名称。对于包含其他字符 (如空格或句点) 的字段,您必须退回到 Python 的字典表示法。例如,要访问名为 col-B,使用: dynamic_record_X["col-B"].

您可以使用一个简单的 Lambda 函数与 Filter 转换来删除所有不来自萨克拉门托或蒙哥马利的 DynamicRecords。要确认此操作是否有效,请打印出保留的记录数:

sac_or_mon_dyF = Filter.apply(frame = dyF, f = lambda x: x["Provider State"] in ["CA", "AL"] and x["Provider City"] in ["SACRAMENTO", "MONTGOMERY"]) print "Filtered record count: ", sac_or_mon_dyF.count()

您得到的输出如下所示:

Filtered record count: 564L