AWS Лямбда неподдерживаемого типа " ": TypeError при загрузке данных в Dynamodb - PullRequest
1 голос
/ 07 апреля 2020

У меня есть лямбда-функция, которая проверяет корзину s3 на событие создания. Если файл загружен в корзину, я анализирую этот файл и загружаю результаты в таблицу DynamodB. Вот как выглядит моя функция.

import json
import boto3
import pandas as pd
import urllib
import io
import uuid
import logging

path = "sensor-data.csv"

obj = s3.get_object(Bucket='sensor-bucket', Key=path)
csv_string = io.BytesIO(obj['Body'].read())

# Read a csv file and turn it into a DataFrame
df = pd.read_csv(csv_string, delimiter=';', engine ='c', encoding= 'unicode_escape')

# Rename columns as seen in the Lambda Function
df.rename(columns={'< 5,6m': 'SmallSize', '>= 5,6m': 'LargeSize'}, inplace=True)

df.Felt.replace(['1', '2', '3', '4'], ['lane_1', 'lane_2', 'lane_3', 'lane_4'], inplace=True)

# Filter out data column
data = df['data'] = df[['Navn', 'Vegreferanse', 'Fra', 'Til', 'Volum',
                        'Felt', 'SmallSize', 'LargeSize']].to_json(orient='records')
# Calculate traffic
traffic = df.groupby(['Felt'])['Volum'].sum().to_dict()

# Create a Dictionary for a new DataFrame
data = {'sensor-id': df.Trafikkregistreringspunkt.iloc[0], 'data': data,
        'date': df.Dato.iloc[0], 'Id': str(uuid.uuid4()), 'traffic': [traffic]}

# Create the dataframe
df2 = pd.DataFrame(data, index=[0])
print("Parsing complete. Writing to table...")

# Connect to dynamodb push items to the table
dynamoDb = boto3.resource('dynamodb')
table = dynamoDb.Table("sensor-data-table")

for line in df2.T.to_dict().values():
    table.put_item(Item=line)

print("Data processing completed successfully!")

На моем локальном компьютере я могу запустить код и поместить данные в таблицу. Однако, когда я пытаюсь сделать это в лямбда-функции, я получаю следующую ошибку:

Unsupported type "<class 'numpy.int64'>" for value "1996": TypeError

1996 - это одно из значений, которые я пытаюсь загрузить в таблицу. Вот как выглядит df2.T.to_dict (). Values ​​();

dict_values([{'sensor-id': '11219V22151', 
'data': '[{"Some Data Here"}]', 
'date': '2020-01-01', 
'Id': '107d8ce5-c7d2-4b86-af83-d5ce7d11ce74', 
'traffic': {'Totalt': 1996, 'Totalt i retning Fianex Rv 415': 944, 
'Totalt i retning Stølen X Rv 420': 1052, 'lane_1': 1052, 'lane_2': 944}}])

Буду признателен за помощь и разъяснение по этому вопросу.

1 Ответ

0 голосов
/ 08 апреля 2020

Оказалось, что я использовал готовый лямбда-пакет для развертывания, который немного устарел. Я создал venv, а затем использовал скрипт сборки для создания zip-файла. Это работало отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...