我用Python在VSCode中创建了一个Azure函数。当我在本地主机上测试AzureWebJob时,API包含对AzureWebJob的访问http://localhost:7071/api/FUNCTIONNAME?Param1=value1 响应为200,JSON返回正常,但是当我将函数部署到Azure时,链接https://APPSERVICENAME.azurewebsites.net/api/FUNCTIONNAME?code=APICODE==&Param1=value1返回500内部服务器错误
我正在使用Postman在Chrome上测试并回答查询
使用的代码是:
import logging
import azure.functions as func
from io import StringIO
import pandas as pd
from datetime import datetime as dt
import json
#filter the dataframe
def filter(pdf, keys, daterange):
jkeys=[]
for key in keys:
#filter by numeric key
if(reg.isdigit()):
jkeys.append(int(key))
#filtering by two types of keys
pdfA=pdf[pdf['key'].isin(keys)]
pdfS=pdf[pdf['numerickey'].isin(jkeys)]
#concat the DFs
pdf=pd.concat([pdfS,pdfA],axis=0)
#Filtering by a dateRange or single date
if(daterange.isdigit()):
pdf=pdf[pdf['Day']==int(daterange)]
return pdf
else:
#getting the two dates
date=daterange.split('-')
#filtering the rows
pdf=pdf[(pdf['Day']>=int(date[0])) & (pdf['Day']<=int(date[1]))]
return pdf
# function to validate the params
def param_validation(param: str,
param_name: str,
req: func.HttpRequest) -> str:
if not param:
try:
req_body = req.get_json()
except ValueError:
if param != None and '-' in param:
return func.HttpResponse(
"Set a date in the query",
status_code=400
)
else:
param = req_body.get(param_name)
return param
else:
return param
def main(req: func.HttpRequest,
inputBlob: func.InputStream) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
#get the params
daterange = req.params.get('daterange')
keys = req.params.get('keys')
name=req.params.get('name')
daterange = param_validation(daterange, 'daterange', req)
keys = param_validation(keys, 'keys', req)
#this condition is included just to test fast if works
if name:
return func.HttpResponse(f"Hello {name}!")
#This is to get the real data request function
if daterange and (keys):
try:
if daterange and keys:
# get the data from a csv in the datalake
data = pd.read_csv(StringIO(inputBlob.read().decode('utf-8')))
keys=keys.split(',')
dfFilt=filter(data,keys,daterange).fillna(0)
return func.HttpResponse(f"{json.dumps(dfFilt.to_dict(orient='record'))}")
else:
return func.HttpResponse(
"insert a valid daterange to the query",
status_code=400
)
except:
return func.HttpResponse(
"Params are wrong.",
status_code=500
)
else:
return func.HttpResponse(
"Params missed",
status_code=400
)
其目的是从datalake获取csv,并返回由提供的2个参数过滤的行
我找到了关于错误的更多信息,平台返回了137个python代码。我使用陈旧的csv(即更轻的60mb)部署了最后一个功能api,该api运行良好。但是当我设置新的csv(300mb)时,api开始返回代码500内部服务器错误
我认为这就是内存问题,因为在本地主机中工作得非常好
是从datalake获取数据的另一种方法,使用azure函数过滤两列吗?还是有可能解决这个内存问题
谢谢
这个问题可能是由许多原因造成的,因此请提供更多详细信息。就我而言,这没有问题
1,参数代码应该是函数的键(如果不是匿名的)
2、请检查您的代码,可能您使用的是不存在的东西。(请显示您的代码和其他文件。)
您可以使用application Insights检查详细信息错误,也可以直接查看日志文件:
转到
https://yourfunctionappname.scm.azurewebsites.net/DebugConsole
,然后单击LogFiles\Application\Functions\Function\HttpTrigger1>
,您将在那里找到日志文件,单击并检查错误任何更新请让我知道
相关问题 更多 >
编程相关推荐