本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
筛选器类
通过从满足指定谓词函数的输入 DynamicFrame
中选择记录来生成新的 DynamicFrame
。
Methods
__call__(帧,f,transformation_ctx="",info=", stageThreshold=0, totalThreshold=0)
通过从满足指定谓词函数的输入 DynamicFrame
中选择记录来返回新的 DynamicFrame
生成。
-
frame
– 要将指定的筛选函数应用到的源DynamicFrame
(必需)。 -
f
– 要应用于每个DynamicRecord
在DynamicFrame
。功能必须采用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财年
下载示例数据后,我们修改了它,以在文件末尾引入了几个错误的记录。此修改后的文件位于公共 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