我试图在AWS Glue的工作中使用boto3来调用Lambda函数但没有结果。
我上传了一个带有库的zip:
没有拉链。
错误是“无法为:端点加载数据”。
我试图在没有zip的情况下调用,但这会导致超时异常。
import boto3
client = boto3.client('lambda' , region_name='us-east-1')
r_lambda = client.invoke(FunctionName='S3GlueJson')
有人可以帮助我吗?
答案 0 :(得分:0)
您是否尝试过针对上述Lambda函数从AWS Lambda控制台中增加超时时间?在这里,您想从Lambda函数实现什么。更多详细信息将有助于更好地解决问题。
答案 1 :(得分:0)
如果要从Lambda函数调用胶粘作业,可以这样做:
import boto3
glue = boto3.client(service_name='glue', region_name='us-east-1',
endpoint_url='https://glue.us-east-1.amazonaws.com')
#Start Job
myNewJobRun = glue.start_job_run(JobName=JOB_NAME)
#Get current state of Job, to be sure it's running
status = glue.get_job_run(JobName=JOB_NAME, RunId=myNewJobRun['JobRunId'])
logger.info('JOB State {}: {}'.format(
JOB_NAME, status['JobRun']['JobRunState']))
由于作业执行可能要花一些时间才能完成,因此最好不要等待Lambda函数完成。
答案 2 :(得分:0)
在 Python 中,使用 Boto3 Lambda client 'invoke()'。例如,您可以创建一个 Lambda container,然后从 Glue 作业中调用它:
import boto3
import pandas as pd
lambda_client = boto3.client('lambda',region_name='us-east-1')
def get_predictions( df ):
# Call getPredictions Lambda container
response = lambda_client.invoke(
FunctionName='getPredictions',
InvocationType='RequestResponse',
LogType='Tail',
Payload=df
)
logger.info('Received response from Lambda container.')
data = response["Payload"].read().decode('utf-8')
x = json.loads(data)
df_pred = pd.DataFrame.from_dict(x)
return df_pred
dfjson = df.to_json()
df_pred = get_predictions( dfjson )
df_pred.head()