#python #azure-functions
#python #azure-функции
Вопрос:
У меня есть функция Azure, созданная в VSCode с помощью Python. API содержит доступ к AzureWebJob, когда я тестировал его на локальном хосте http://localhost:7071/api/FUNCTIONNAME ?Param1=value1 ответ равен 200, и возврат JSON в порядке, но при развертывании функции в Azure ссылкаhttps://APPSERVICENAME.azurewebsites.net/api/FUNCTIONNAME?code=APICODE==amp;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])) amp; (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
)
Цель состоит в том, чтобы получить csv из datalake и вернуть строки, отфильтрованные по предоставленным 2 аргументам.
Я нашел больше информации об ошибке, платформа возвращает 137 кода python. Я развернул последний функциональный API с устаревшим csv (который легче, 60 МБ), и API работает хорошо. Но когда я устанавливаю новый csv (300 МБ), api начинает возвращать внутреннюю ошибку сервера code 500.
Я думаю, что это просто проблема с памятью, потому что на локальном хосте работает отлично.
есть ли другой способ получить данные из datalake, фильтруя два столбца с помощью функции Azure? Или это возможно для устранения этой проблемы с памятью?
Спасибо!
Комментарии:
1. Код API? Вы даете ей ключ?
2. Привет, есть какие-нибудь обновления?
3. Да, я добавил ошибку python и реализовал код.
Ответ №1:
Эта проблема может быть вызвана многими причинами, поэтому, пожалуйста, покажите более подробную информацию. С моей стороны, это не проблема.
1, код параметра должен быть ключом вашей функции (если он не анонимный.)
2, пожалуйста, проверьте свой код, возможно, вы используете что-то, чего не существует.(Поэтому, пожалуйста, покажите свой код и другие файлы.)
Вы можете использовать Application Insights для проверки ошибки details или напрямую перейти к просмотру файлов журнала:
Перейдите к https://yourfunctionappname.scm.azurewebsites.net/DebugConsole
, а затем нажмите на LogFilesApplicationFunctionsFunctionHttpTrigger1>
, вы найдете там файлы журнала, щелкните и проверьте ошибку.
Пожалуйста, дайте мне знать о любых обновлениях.
Комментарии:
1. Я обновил информацию об ошибке! Если вы знаете, как это решить, пожалуйста, дайте мне знать. Я продолжаю работать над этим, если я нашел способ решить это. Я опубликую решение.