我想了解是否可以在AWS Glue的Spark数据框架上应用FindMatch机器学习转换。目前我可以在动态框架上使用它。如果我想在动态框架上使用FindMatch转换,以下是语法:
<应用了ml转换的输出动态框架> = FindMatches.apply(frame = <输入动态框架>, transformId = <单独创建的findmatch ml转换的转换id>)
我尝试用数据框架替换输入的动态框架,当我运行Glue作业时,它失败了。显示的错误如下:
“属性错误:’DataFrame’对象没有属性’glue_ctx'”
以下是我尝试使用数据框架的代码:
import sysfrom awsglue.transforms import *from awsglue.utils import getResolvedOptionsfrom pyspark.context import SparkContextfrom awsglue.context import GlueContextfrom awsglue.job import Jobfrom awsglueml.transforms import FindMatchesargs = getResolvedOptions(sys.argv, ['JOB_NAME'])sc = SparkContext()glueContext = GlueContext(sc)spark = glueContext.spark_sessionjob = Job(glueContext)job.init(args['JOB_NAME'], args)datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "hospitality", table_name = "personinputdata", transformation_ctx = "datasource0")df0 = datasource0.toDF()resolvechoice1 = ResolveChoice.apply(frame = datasource0, choice = "MATCH_CATALOG", database = "hospitality", table_name = "personinputdata", transformation_ctx = "resolvechoice1")findmatchdf = FindMatches.apply(frame = df0, transformId = "tfm- 01cc9b02c93640cfc7ce5ea91745e24258cb2e01")findmatchdf.show()
而下面是当我改用动态框架时工作的代码:
我在网上搜索了FindMatch机器学习转换的代码,但哪儿也找不到。
回答:
正如你所知,FindMatch只能在动态框架上工作…所以你可以随时将你的Spark数据框架转换为动态框架来运行它
from awsglue.dynamicframe import DynamicFrameglueContext = GlueContext(SparkContext.getOrCreate())Dyf0 = DynamicFrame.fromDF(df0, glueContext, "anyname")
然后按需要运行你的FindMatch转换。