Oto uproszczona wersja tego, czego używam do odczytu danych z DynamoDB do R. Opiera się na tym, że R i Python mogą wymieniać dane, a biblioteka o nazwie boto w Pythonie sprawia, że pobieranie danych jest naprawdę łatwe DynamoDB. Byłoby fajnie, gdyby to był cały pakiet R, ale nie będę narzekał, biorąc pod uwagę 25 GB wolnego miejsca, które można dostać z Amazon.
Po pierwsze, trzeba skrypt Pythona, tak jak o nazwie query_dynamo.py:
import boto3
import time
dynamodb = boto3.resource('dynamodb',
aws_access_key_id='<GET ME FROM AWS>',
aws_secret_access_key='<ALSO GET ME FROM AWS CONSOLE>',
region_name='us-east-1')
table = dynamodb.Table('comment') ###Your table name in DynamoDB here
response = table.scan()
data = response['Items']
while 'LastEvaluatedKey' in response:
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
data.extend(response['Items'])
Następnie w R to zrobić. Jeśli próbujesz tego w systemie Windows, możesz zamiast tego wypróbować rPython-win. Zrobiłem to wszystko w systemie Ubuntu Linux 16.04 LTS.
library(rPython)
python.load("query_dynamo.py")
temp = as.data.frame(python.get('data'))
df = as.data.frame(t(temp))
rm(temp)
Teraz masz dataframe nazwie „DF” z treścią cokolwiek umieścić w DynamoDB.
Rozważałem stworzenie pakietu r do tego celu, ale ostatecznie zdecydowałem się na użycie php. Oto dokumentacja, którą musisz wykonać, aby stworzyć własny pakiet, myślę: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/MakingHTTPRequests.html Prawdopodobnie będziesz chciał użyć pakietu RCurl jako pomoc w uzyskiwaniu dostępu do API – Rguy
Szybko rzuciłem okiem na kod Pythona dla dynamodb i wydaje się, że najpierw musisz zaimplementować wiele rzeczy o niższym poziomie dostępu do ogólnego interfejsu Amazon. Wątpię, by ktokolwiek to zrobił jeszcze w R. Możesz użyć 'system' do wywołania jakiegoś kodu Pythona, ale stracisz trochę wydajności. – Spacedman
Najprawdopodobniej będzie łatwiej używać istniejących bibliotek R do pracy z S3 lub HDFS na EMR i eksportować DynamoDB na tamten numer – Guy