」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 AWS Lambda 函數中匯入 Pandas(庫) - AWS Lambda Layers

如何在 AWS Lambda 函數中匯入 Pandas(庫) - AWS Lambda Layers

發佈於2024-11-08
瀏覽:310

假設您需要在 AWS Lambda 函數上執行 Python 腳本,然後收到此錯誤?

{
  "errorMessage": "Unable to import module 'lambda_function': No module named 'pandas',
  "errorType": "Runtime.ImportModuleError"
  ...
}

別擔心,這是一個常見的錯誤,我不會說這麼長

如何在 AWS Lambda Functions 中匯入 Pandas?

有許多方法,但我將為您提供在 AWS Lambda 函數中匯入 pandas 的最簡單方法是新增 Lambda 層?

什麼是 AWS Lambda 層?

這是一個? Lambda 函數中的起司層包含額外的程式碼,如函式庫、相依性等。

簡單來說

AWS Lambda Layers 就像是您的函數的構建塊。 想像您需要額外的工具(如 Pandas 庫)來完成一個專案。 AWS 可讓您建立工具層(庫、相依性或共用程式碼),而不是將所有這些工具打包到每個專案中(這會浪費空間和時間)。這些層位於您的主要功能之外,但在您的功能需要時始終可用。

簡而言之,Lambda Layers 可以幫助您:

透過將主邏輯與額外的函式庫分開來節省程式碼空間。
跨多個 Lambda 函數重複使用函式庫和程式碼。
輕鬆更新或管理您的依賴項,而無需更改核心功能程式碼。

將層視為附加到 Lambda 函數的額外儲存盒,可容納函數順利運作所需的所有內容。您可以在函數上堆疊多個層,而不會使主程式碼變得混亂。

新增 Lambda 函數層和導入 Pandas 的步驟

只需 3 個步驟即可在 Lambda 函數中成功運行 Pandas

步驟 1 - 透過 AWS 管理控制台開啟 Lambda 函數

如您所見,我們的Lambda 函數名稱下有一個選項Layers,在我的例子中,它是“import-pandas-function”,層數為0

How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers

步驟 2 - 在 AWS Lambda 函數中新增腳本

這一步驟又分為兩步,因為我們需要加入一個包含一些Pandas程式碼的Python腳本,並用JSON寫一個測試事件來驗證程式碼是否正確運作。

2.1 - 新增Python腳本 - 你可以複製這段程式碼嗎?

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)
    }

2.2 - 在測試標籤中新增 Json 測試腳本 - 您可以複製此程式碼嗎?

{
  "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”
...

步驟 3 - 新增 AWS Lambda 層以在程式碼中成功運行 Pandas

向下捲動到您的 Lambda 函數,您可能可以在頁面末尾看到「Layers」單獨部分
How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers

3.1 - 點選“新增圖層”

點擊「新增圖層」後,您可以看到頁面,其中有幾個部分「函數運行時設定」和「選擇圖層」
How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers

3.2 - 點選“AWS 圖層”

您可以在「選擇層」區段中看到三個選項,按一下「AWS 層」。
How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers

3.3 - 選擇“AWS層”

選擇 AWS 層後,您可以看到「AWS 層」下的下拉清單。
How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers

3.4 - 選擇“AWS層”和“版本”

在「AWS 層」下拉清單中選擇 -> AWSSDKPandas-Python312
How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers
在「版本」下拉清單中選擇 -> 13(選擇最多的一個)
How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers
點選“新增”按鈕
How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers

3.5 - 確保“功能概述”

當您的頁面定向到功能概述時,您可以看到該圖層添加到功能名稱「import-pandas-function」下方
How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers

第 4 步 - 測試功能

您已成功獲得回應"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}}}"
}

How to Import Pandas(library) in AWS Lambda Functions - AWS Lambda Layers


繼續編碼?

版本聲明 本文轉載於:https://dev.to/heighter/how-to-import-pandaslibrary-in-aws-lambda-functions-aws-lambda-layers-1oen?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何有效率地尋找多個Python清單中的相交元素?
    如何有效率地尋找多個Python清單中的相交元素?
    識別多個Python列表中的共享元素在Python中,提取兩個列表的交集可以使用set.intersection()函數來實現。然而,確定多個清單的交集變得更加複雜。這是一個有效識別多個清單之間共享元素的解決方案:答案中提供的公式set.intersection(*map(set,d)) 提供了一種...
    程式設計 發佈於2024-11-08
  • 如何取得 Openpyxl 中單元格的原始值,即使它包含公式?
    如何取得 Openpyxl 中單元格的原始值,即使它包含公式?
    如何在Openpyxl 中擷取實際儲存格值使用openpyxl 存取Excel 中的儲存格值時,您可能會遇到顯示的值與儲存在Openpyxl中的實際值之間的差異單元格(如果單元格包含公式)。這是因為 openpyxl 通常會解釋公式並檢索計算結果。 要擷取實際儲存格值(包括公式),可以在載入工作簿時...
    程式設計 發佈於2024-11-08
  • Go 中如何有效率地將 UTF-8 字串轉換為位元組數組?
    Go 中如何有效率地將 UTF-8 字串轉換為位元組數組?
    將UTF-8 字串轉換為位元組陣列解組JSON 需要位元組切片輸入,而字串在Go 中儲存為UTF-8 。本文探討了 UTF-8 字串到位元組數組的高效轉換。 直接轉換Go 允許將字串轉換為位元組切片,建立字串位元組的副本:s := "some text" b := []byte(...
    程式設計 發佈於2024-11-08
  • 我如何使用 dpdm 修復 Redux 中的循環依賴錯誤
    我如何使用 dpdm 修復 Redux 中的循環依賴錯誤
    打破混亂循環:Redux 循環依賴之旅 最近,我在 Redux 程式碼庫中偶然發現了一個讓我摸不著頭緒的錯誤。如果您曾經在測試套件拋出毫無意義的錯誤時感到突然的混亂,您就會知道這種感覺。這是發生的事情以及我最終如何發現(並解決)問題的。 循環依賴到底是什麼? 當兩...
    程式設計 發佈於2024-11-08
  • 我可以在單一 MySQLi 語句中準備多個查詢嗎?
    我可以在單一 MySQLi 語句中準備多個查詢嗎?
    在單一 MySQLi 語句中準備多個查詢不可能在單一 MySQLi 語句中準備多個查詢。每個 mysqli_prepare() 呼叫只能準備一個查詢。 執行多個查詢的替代方法如果您需要一次執行多個查詢,您可以建立並為每個查詢執行單獨的mysqli_prepare() 語句。 $stmtUser = ...
    程式設計 發佈於2024-11-08
  • 在 Golang 中安全使用 Map:宣告和初始化的差異
    在 Golang 中安全使用 Map:宣告和初始化的差異
    介绍 本周,我正在为 golang 开发一个 API 包装器包,它处理发送带有 URL 编码值的 post 请求、设置 cookie 以及所有有趣的东西。但是,当我构建主体时,我使用 url.Value 类型来构建主体,并使用它来添加和设置键值对。然而,我在某些部分遇到了有线零指针...
    程式設計 發佈於2024-11-08
  • 下一個目標
    下一個目標
    我剛剛完成了我的論文,並以令人印象深刻的分數9.1/10,我對此感到非常自豪。提交給 REV-ECIT 2024 的截止日期是 9 月 30 日,目的是將我的論文變成已發表的期刊文章。目前我正在博士生導師的支持下完善我的工作,非常感謝他的指導。 ? 另外,在與SA進行了很長時間的面試後,提出了一...
    程式設計 發佈於2024-11-08
  • Better - 人工智慧驅動的程式碼審查器 GitHub Action
    Better - 人工智慧驅動的程式碼審查器 GitHub Action
    代码审查对于维护标准和强调项目中代码的最佳实践始终至关重要。这不是一篇关于开发人员应该如何审查代码的文章,更多的是关于将一​​部分代码委托给 AI。 正如 Michael Lynch 在他的文章“如何像人类一样进行代码审查”中提到的那样——我们应该让计算机处理代码审查的无聊部分。虽然迈克尔强调格式化...
    程式設計 發佈於2024-11-08
  • 如何使用 Java 8 有效統計列表中的詞頻?
    如何使用 Java 8 有效統計列表中的詞頻?
    使用 Java 8 計算詞頻在 Web 開發和資料分析中,理解詞頻至關重要。為了實現這一目標,我們將深入研究如何使用 Java 8 計算清單中單字的頻率。 Java 8 解決方案Java 8 中的 Stream API 為單字提供了一個優雅的解決方案頻率計數。首先,建立一個單字清單:List<...
    程式設計 發佈於2024-11-08
  • 什麼是封裝以及如何使用它。
    什麼是封裝以及如何使用它。
    什麼是封裝? Java 中的封裝就是隱藏某些東西如何運作的細節,同時仍然允許其他人使用它。您將資料(如變數)和方法(如函數)分組到一個單元中,稱為類別。您不是讓每個人都直接存取您的數據,而是提供方法(getter 和 setter)來控制數據的存取或更改方式。這樣,您可以保護您的資料並保持程式碼整...
    程式設計 發佈於2024-11-08
  • Java 中的倒置二元樹
    Java 中的倒置二元樹
    最近,我開始練習一些 LeetCode 練習,以提高我的演算法/資料結構技能。我可以說,該平台提供了一個良好的環境,可以與其他開發人員一起練習和學習多種程式語言的解決方案,與他人討論、分享解決方案,並練習大公司要求的程式碼挑戰。 什麼是 LeetCode? LeetCode 是一個...
    程式設計 發佈於2024-11-08
  • 如何在Python中高效率找出一個數的因數?
    如何在Python中高效率找出一個數的因數?
    在Python 中高效查找數字的因數確定數字的因數是各個領域中的常見任務,Python 提供了多種有效的方法來完成它。 一種最佳化方法涉及利用 Python 的 reduce 函數以及列表理解。這個簡潔的解決方案有效地找到給定數字的所有因子。 from functools import reduce...
    程式設計 發佈於2024-11-08
  • JavaScript 困境:嵌入腳本與內嵌執行?
    JavaScript 困境:嵌入腳本與內嵌執行?
    外部腳本標籤中的JavaScript:來源困境當使用帶有 的外部腳本標籤時語法,了解它們的限制很重要。嘗試將 JavaScript 直接嵌入到這些標記中(如下例所示)會導致意外行為:<script src="myFile.js"> alert("Th...
    程式設計 發佈於2024-11-08
  • 屬性 Hooks 無 PHP
    屬性 Hooks 無 PHP
    11 月,我們將推出我們心愛的 PHP 8.4 版本,隨之而來的是社區期待已久的新功能:屬性掛鉤!受到 C#、Swift 和 Kotlin 等其他語言的啟發,這個新功能消除了魔法方法 __set() 和 __get() 的麻煩。 我將展示一個範例,說明目前如何擁有 getter 和 setter,...
    程式設計 發佈於2024-11-08
  • 如何在不阻塞伺服器和客戶端的情況下即時讀取和回顯伺服器目前正在寫入的上傳檔案大小?
    如何在不阻塞伺服器和客戶端的情況下即時讀取和回顯伺服器目前正在寫入的上傳檔案大小?
    如何在不阻塞伺服器和客戶端的情況下,即時讀取和列印正在伺服器端寫入的上傳檔案的大小? 讓我們展開來討論這個問題:為了即時取得文件上傳的進度,我們在POST 請求中透過fetch() 從Blob、File、TypedArray 或ArrayBuffer 物件設定了body 物件。 目前的實作將 Fil...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3