从 Pandas 到 Polars 三十七:在 AWS Lambda 环境中使用 Polars 来处理数据

如今,在serverless环境中使用Polars与在本地使用Polars非常相似。因为Polars现在内置了对在eager模式和lazy模式下从云存储(如AWS S3)读取和写入的支持,我们通常可以在处理程序函数中编写标准的Polars语法。

在这个例子中,我将向你展示如何在Docker镜像中创建一个AWS Lambda函数。在Docker中进行这种操作的一个好处是,你可以在将Lambda函数部署到AWS之前,在本地对它们进行测试。

我们首先在一个requirements.txt文件中定义我们的依赖项。我们所需要的只是Polars和用于在eager模式下与云存储中的文件一起工作的库。

polarsfsspecs3fs

在实际的生产查询中,我强烈建议你锁定你的依赖项的版本。根据我的经验,与云存储一起工作的库会频繁更新,而pip在协调不同版本时经常会遇到问题。

接下来,我们使用最新的Python运行时在Dockerfile中定义我们的Docker镜像。我们使用一个为基础Docker镜像,该镜像专为运行lambda函数而创建。

这个镜像的一个特点是它有一个名为LAMBDA_TASK_ROOT的变量,该变量指向运行lambda函数的目录。这对于将文件复制到镜像中很有用。

# Use a python image from AWSFROM public.ecr.aws/lambda/python:3.11# Copy requirements.txt into the right directory for the lambda functionCOPY requirements.txt ${LAMBDA_TASK_ROOT}# Install the specified packages (and cache the downloaded packages)RUN --mount=type=cache,target=/root/.cache/pip  pip install -r requirements.txt# Copy function codeCOPY lambda_function.py ${LAMBDA_TASK_ROOT}# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)CMD [ "lambda_function.handler" ]

在Dockerfile的pip install行之前,我添加了一个命令来缓存下载的Python包。这在开发函数时可以节省大量时间。我将在下面详细解释这一点。

现在我们需要编写一个Python脚本,该脚本在lambda函数被调用时运行。在这个函数中,我们将以急切模式从S3读取一个Parquet文件,按列进行分组,并计算另一列的平均值。我将结果以JSON格式获取。

import polars as pldef handler(event, context):try:# Define the object url        url = "s3://<bucket_name>/test_file.pq"# Download and read the parquet file        df = (pl.read_parquet(url,columns=["id1", "v1"],).groupby("id1").agg(pl.col("v1").mean()))# Return the dataframe as json        return df.write_json()except Exception as err:# Return the error if something goes wrong        return err

在使用Docker时,我经常编写一个shell脚本来构建镜像、在本地运行容器并将其部署到云端。

在这个示例的shell脚本中,当运行容器时,我将我的.aws文件夹挂载到容器中的.aws文件夹。这种挂载允许我在本地运行时使用我的AWS凭据来访问S3存储桶。

#!/bin/bash# Build the docker imagedocker build --platform linux/amd64 -t docker-image:test .# Run the docker image locally# Open port 9000 on the host and map it to port 8080 in the container# Mount the .aws folder in the home directory to the .aws folder in the containerdocker run --platform linux/amd64 -p 9000:8080 -v ~/.aws:/root/.aws docker-image:test

我们现在可以通过向端口9000上的本地端点发送请求来在本地测试lambda函数。

curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

如果在本地运行,会看到简单函数的输出以JSON格式显示。

下一步

从这一点开始,你需要在AWS中创建一个Elastic Container Repository(ECR),并将你的镜像推送到其中。然后,你可以创建一个lambda函数,该函数使用你的镜像作为容器。关于这些步骤的更多详细信息,请参阅AWS的教程。

关于优化Polars和AWS Lambda,还有很多要说的。例如,你可以使用Polars以懒加载模式从S3读取和写入数据,这使得Polars能够应用查询优化。我将在未来的帖子中讨论这一点。

我们还可以考虑如何根据我们在S3中存储数据的方式来加快查询速度。例如,我们可以使用分区的Parquet文件来使查询更加高效。我在我的研讨会上提到了这一点,并且我也会在未来的博客文章中讨论它。

 往期热门文章:

从 Pandas 到 Polars 二十六:在Polars中,不要遍历列

从 Pandas 到 Polars 二十三:如果你的数据已经排序,Polars可以为你提供助力

从 Pandas 到 Polars 十八:数据科学 2025,对未来几年内数据科学领域发展的预测或展望

从 Pandas 到 Polars 十三:流式处理的关键参数

从 Pandas 到 Polars 十:“Polars 表达式“是什么?

从 Pandas 到 Polars 六:在 Polars 中流式处理大型数据集

从 Pandas 到 Polars 0:理解Polars嵌套列类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python处理excel表格数据

xlrd读取excel xlrd可以从Microsoft Excel&#xff08;tm&#xff09;电子表格文件中提取数据 xlrd库官网&#xff1a; xlrd — xlrd 2.0.1 documentation 安装&#xff1a; pip install xlrd import xlrdbook xlrd.open_workbook("myfile.xls") print("当…

初始TypeScript

TS增加的类型 原始类型 let str: string name 其他的都一样的写。 数组类型 let arr: number[] [1,2,3] //数字数组 let bool: boolean[] [false,true] //布尔数组let str: Array<string> [a,b,c]联合类型 多种类型定义拼接&#xff0c;不能通过&拼接&…

【linux服务器】大语言模型实战教程:LLMS大模型快速部署到个人服务器

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 说到大语言模型相信大家都不会陌生&#xff0c;大型语言模型(LLMs)是人工智能文本处理的主要类型,也现在最流行的人工智能…

【数据结构】线性表与顺序表

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

Python入门第三课

# 入门第三课 # 关键字 if and or in not in ! car g print(car g) print(car dd) if car ! hh:print("wlcome to here ") age 33 print(age 33) print(age 44) age1 44 if age >0 and age1 > 0:print("nihao") if age >0 or age1 > …

【算法】分布式共识Paxos

一、引言 在分布式系统中&#xff0c;一致性是至关重要的一个问题。Paxos算法是由莱斯利兰伯特&#xff08;Leslie Lamport&#xff09;在1990年提出的一种解决分布式系统中一致性问题的算法。 二、算法原理 Paxos算法的目标是让一个分布式系统中的多个节点就某个值达成一致。算…

【Django】前端技术-网页样式表CSS

文章目录 一、申明规则CSS的导入方式行内样式内部样式外部样式 二、CSS的选择器1. 基本选择器标签选择器&#xff1a; 选择一类标签 标签{}类选择器 class&#xff1a; 选择所有class属性一致的表情&#xff0c;跨标签.类名{}ID选择器&#xff1a;全局唯一 #id名{} 2.层次选择器…

束搜索(与贪心、穷举对比)

一、贪心搜索 1、基于贪心搜索从Y中找到具有最高条件概率的词元&#xff0c;但贪心可能不是最优解 2、比如 &#xff08;1&#xff09;贪心&#xff1a;.5*.4*.2*.1.0024 &#xff08;2&#xff09;另外&#xff1a;.5*.3*.6*.6.0054 二、穷举搜索 &#xff08;1&#xff0…

Transformer中的Multi-head Attention机制解析——从单一到多元的关注效益最大化

Transformer中的Multi-head Attention机制解析——从单一到多元的关注效益最大化 Multi-head Attention的核心作用 组件/步骤描述多头注意力机制&#xff08;Multi-head Attention&#xff09;Transformer模型中的关键组件&#xff0c;用于处理序列数据功能允许模型同时关注到…

数据库 执行sql添加删除字段

添加字段&#xff1a; ALTER TABLE 表明 ADD COLUMN 字段名 类型 DEFAULT NULL COMMENT 注释 AFTER 哪个字段后面; 效果&#xff1a; 删除字段&#xff1a; ALTER TABLE 表明 DROP COLUMN 字段;

科普文:分布式架构中的三高:高并发、高性能、高可用

关于高并发 高并发场景 互联网应用以及云计算的普及&#xff0c;使得架构设计和软件技术的关注点从如何实现复杂的业务逻 辑&#xff0c;转变为如何满足大量用户的高并发访问请求。 一个简单的计算处理过程&#xff0c;如果一旦面对大量的用户访问&#xff0c;整个技术挑战就…

人工智能类——计算机科学与技术

计算机科学与技术是一个非常大的门类。目前计算机科学与技术类招生的专业主要有计算机科学与技术、软件工程、网络工程、信息安全、物联网工程等&#xff0c;后面的几个专业是计算机科学与技术的重要分支&#xff0c;而这个门类的其他分支并没有单列出来一个本科专业&#xff0…

mongodb 数据库修复指南

mongodb 数据库修复指南 原因&#xff1a;mongodb 数据库因为断电导致数据库损坏&#xff0c;服务无法启动&#xff0c;但是mongodb 的数据库的数据都在本地&#xff08;这个是重点&#xff0c;docker 安装一定要挂载/data/db到宿主机&#xff09; 找一台windows电脑&#xff0…

leetcode热题系列章节11

378. 有序矩阵中第K小的元素 给定一个 n x n 矩阵&#xff0c;其中每行和每列元素均按升序排序&#xff0c;找到矩阵中第k小的元素。 请注意&#xff0c;它是排序后的第k小元素&#xff0c;而不是第k个元素。 示例: matrix [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15] ], k …

【数据结构】顺序表(c语言实现)(附源码)

​ &#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 1.顺序表的概念与结构 2.顺序表的分类 3.顺序表的实现 3.1 结构定义及方法的声明 3.2 方法的实现 3.2.1 初始化 3.2.2 销毁 3.2…

Could not find a package configuration file provided by “gflags_catkin“ 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04 ROS-Noetic 一、问题描述 CMake Error at /***/devel/share/catkin_simple/cmake/catkin_simple-extras.cmake:38 (find_package):By not providing "Findgflags_…

Nvidia GPU驱动安装报错显卡与驱动不兼容(本身兼容)

最近在公司服务器上遇到了一个特别离谱的问题&#xff0c;就是在本身在nividia官网上面下载的匹配的显卡驱动&#xff0c;安装之后采用下面命令查看驱动显示&#xff1a; $ nvidia-smiNVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make su…

深度强化学习 ①(DRL)

参考视频&#xff1a;&#x1f4fa;王树森教授深度强化学习 前言&#xff1a; 最近在学习深度强化学习&#xff0c;学的一知半解&#x1f622;&#x1f622;&#x1f622;&#xff0c;这是我的笔记&#xff0c;欢迎和我一起学习交流~ 这篇博客目前还相对比较乱&#xff0c;后面…

web服务器搭建练习

练习要求&#xff1a; 搭建一个web服务器&#xff0c;客户端通过www.haha.com访问该网站时能够看到内容:this is haha 完成过程&#xff1a; 1. 创建新ip&#xff0c;重启ens [rootlocalhost ~]# nmtui [rootlocalhost ~]# nmcli connection up ens1602.创建目录&#xff0…

Java面试八股之Spring boot的自动配置原理

Spring boot的自动配置原理 Spring Boot 的自动配置原理是其最吸引人的特性之一&#xff0c;它大大简化了基于 Spring 框架的应用程序开发。以下是 Spring Boot 自动配置的基本原理和工作流程&#xff1a; 1. 启动类上的注解 Spring Boot 应用通常会在主类上使用 SpringBoot…