【发布时间】:2019-08-26 13:14:52
【问题描述】:
我正在从 AWS S3 读取 pandas DF,尝试在其上运行一些预处理 SQL 并再次保存为 csv,同样使用 pandasql 库。这里的挑战是,在我的本地机器上它工作得很好,但在 AWS Lambda 上它失败并出现以下错误:
"An error occured: (sqlite3.OperationalError) no such table: TblV\n[SQL: SELECT * from TblV;]\n(Background on this error at: http://sqlalche.me/e/e3q8)"
注意:我在 Amazon AMI Linux EC2 实例上构建了 pandas 和 pandasql 的部署包,使用 lambda_function 代码对其进行压缩并推送到 AWS S3 并通过传递路径。
我的本地代码,运行良好:
import pandas as pd
from pandasql import sqldf
from time import time
t1 = time()
TblV = pd.read_csv(r"C:\Users\ab\Documents\test.csv")
query = """SELECT * from TblV"""
df = sqldf(query, globals())
print(df.columns)
print(df.shape)
print(df.head(5))
t2 = time()
print('Time taken: ', t2 - t1)
我在 AWS Lambda 函数中的代码无论我做什么都会引发上述错误:
import json
import boto3
import datetime
import pandas as pd
from pandasql import sqldf
import sys
from io import StringIO
def lambda_handler(event, context):
try:
client = boto3.client('s3')
bucket_name = 'bucket'
object_key = 'test/Vol/test.csv'
csv_obj = client.get_object(Bucket=bucket_name, Key=object_key)
body = csv_obj['Body']
csv_string = body.read().decode('utf-8')
TblV = pd.read_csv(StringIO(csv_string))
print(TblV.head(5)) # This print works perfectly
query = """SELECT * from TblV;"""
df = sqldf(query, globals())
print(df.columns)
print(df.shape)
print(df.head(5))
except Exception as e:
err = "An error occured: " + str(e)
return err
【问题讨论】:
标签: pandas amazon-web-services aws-lambda python-3.6 pandasql