有没有人能够使用 R 编程语言在亚马逊 dynamodb 中成功地进行 CRUD 记录?我发现支持的语言绑定参考:
唉,没有 R。我们正在考虑将 dynamodb 用于大型数据项目,但我们的主要分析师最熟悉 R,因此我们正在探索我们的选择。
有没有人能够使用 R 编程语言在亚马逊 dynamodb 中成功地进行 CRUD 记录?我发现支持的语言绑定参考:
唉,没有 R。我们正在考虑将 dynamodb 用于大型数据项目,但我们的主要分析师最熟悉 R,因此我们正在探索我们的选择。
这是我用于将数据从 DynamoDB 读取到 R 中的简化版本。它依赖于 R 和 Python 可以交换数据这一事实,而 Python 中名为boto的库使从 DynamoDB 获取数据变得非常容易。如果这都是一个 R 包,那就太好了,但考虑到您可以从亚马逊获得 25GB 的免费存储空间,我不会抱怨。
首先,您需要一个名为query_dynamo.py的 Python 脚本:
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'])
然后在R中你这样做。如果你在 Windows 上尝试这个,你可能想试试rPython-win。我在 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)
现在,您将拥有一个名为“df”的数据框,其中包含您放入 DynamoDB 中的任何内容。
对于遇到此问题的任何人,现在都有Paws 包,一个适用于 R 的 AWS 开发工具包。您可以使用install.packages("paws")
.
免责声明:我是 Paws 包的维护者。
例如:
# Create a client object.
svc <- paws::dynamodb()
# This example retrieves an item from the Music table. The table has a
# partition key and a sort key (Artist and SongTitle), so you must specify
# both of these attributes.
item <- svc$get_item(
Key = list(
Artist = list(
S = "Acme Band"
),
SongTitle = list(
S = "Happy Day"
)
),
TableName = "Music"
)
# This example adds a new item to the Music table.
svc$put_item(
Item = list(
AlbumTitle = list(
S = "Somewhat Famous"
),
Artist = list(
S = "No One You Know"
),
SongTitle = list(
S = "Call Me Today"
)
),
ReturnConsumedCapacity = "TOTAL",
TableName = "Music"
)
有几种方法可以解决这个问题......让我添加两个:
1- 带有 Hive 和流的 EMR。
Hive 将用于查询 DynamoDB,并可用作 Haddop Streaming 的输入,可用于任何可以从标准 IO 读取和写入的语言,包括 R。
当然,这与典型的 R 程序和环境有很大不同,但它会利用“大数据”工具。
2- JVM 中的 R-ish
如果您使用 JVM 的 R 解释器(例如 Renjin)或 JVM 中的类似语言,您将能够直接使用 AWS Java SDK 和 DynamoDB 库,这对开发人员来说可能更熟悉,但您将负责处理数据的“大”。
Cloudyr 的 aws.dynamodb便于从 DynamoDB 中读取数据。然而,不幸的是,它有一种强迫角色做事的倾向。此外,我在使用 put_item 函数将字符串数据以外的任何内容添加到 DynamoDB 时遇到了麻烦。
AWS CLI 运行良好。这里的例子:
$ aws dynamodb put-item --table-name "SOMETABLE" --item '{"aStringItem": {"S": "1900-01-02|myid"}, "aNumericItem": {"N": "2"}, "aMapItem": {"M": {"Source": {"S": "CLI"}}}}'