假設您需要在 AWS Lambda 函數上執行 Python 腳本,然後收到此錯誤?
{ "errorMessage": "Unable to import module 'lambda_function': No module named 'pandas', "errorType": "Runtime.ImportModuleError" ... }
別擔心,這是一個常見的錯誤,我不會說這麼長
有許多方法,但我將為您提供在 AWS Lambda 函數中匯入 pandas 的最簡單方法是新增 Lambda 層?
這是一個? Lambda 函數中的起司層包含額外的程式碼,如函式庫、相依性等。
AWS Lambda Layers 就像是您的函數的構建塊。 想像您需要額外的工具(如 Pandas 庫)來完成一個專案。 AWS 可讓您建立工具層(庫、相依性或共用程式碼),而不是將所有這些工具打包到每個專案中(這會浪費空間和時間)。這些層位於您的主要功能之外,但在您的功能需要時始終可用。
簡而言之,Lambda Layers 可以幫助您:
透過將主邏輯與額外的函式庫分開來節省程式碼空間。
跨多個 Lambda 函數重複使用函式庫和程式碼。
輕鬆更新或管理您的依賴項,而無需更改核心功能程式碼。
將層視為附加到 Lambda 函數的額外儲存盒,可容納函數順利運作所需的所有內容。您可以在函數上堆疊多個層,而不會使主程式碼變得混亂。
只需 3 個步驟即可在 Lambda 函數中成功運行 Pandas
如您所見,我們的Lambda 函數名稱下有一個選項Layers,在我的例子中,它是“import-pandas-function”,層數為0
這一步驟又分為兩步,因為我們需要加入一個包含一些Pandas程式碼的Python腳本,並用JSON寫一個測試事件來驗證程式碼是否正確運作。
import json import pandas as pd def lambda_handler(event, context): data = event.get('data', []) df = pd.DataFrame(data) if not df.empty: mean_value = df['column_name'].mean() result = { "mean_value": mean_value, "data_shape": df.shape, "summary": df.describe().to_dict() } else: result = { "message": "Empty DataFrame" } # Return the response return { 'statusCode': 200, 'body': json.dumps(result) }
{ "data": [ {"column_name": 10, "other_column": "A"}, {"column_name": 20, "other_column": "B"}, {"column_name": 30, "other_column": "C"}, {"column_name": 40, "other_column": "D"} ] }
按下測試按鈕,您可能會收到錯誤:-
“errorMessage”:“無法導入模組“lambda_function”:沒有名為“pandas”的模組,
“errorType”:“Runtime.ImportModuleError”
...
向下捲動到您的 Lambda 函數,您可能可以在頁面末尾看到「Layers」單獨部分
點擊「新增圖層」後,您可以看到頁面,其中有幾個部分「函數運行時設定」和「選擇圖層」
您可以在「選擇層」區段中看到三個選項,按一下「AWS 層」。
選擇 AWS 層後,您可以看到「AWS 層」下的下拉清單。
在「AWS 層」下拉清單中選擇 -> AWSSDKPandas-Python312
在「版本」下拉清單中選擇 -> 13(選擇最多的一個)
點選“新增”按鈕
當您的頁面定向到功能概述時,您可以看到該圖層添加到功能名稱「import-pandas-function」下方
您已成功獲得回應"statusCode": 200
{ "statusCode": 200, "body": "{\"mean_value\": 25.0, \"data_shape\": [4, 2], \"summary\": {\"column_name\": {\"count\": 4.0, \"mean\": 25.0, \"std\": 12.909944487358056, \"min\": 10.0, \"25%\": 17.5, \"50%\": 25.0, \"75%\": 32.5, \"max\": 40.0}}}" }
繼續編碼?
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3