7

有没有人能够使用 R 编程语言在亚马逊 dynamodb 中成功地进行 CRUD 记录?我发现支持的语言绑定参考:

http://aws.typepad.com/aws/2012/04/amazon-dynamodb-libraries-mappers-and-mock-implementations-galore.html

唉,没有 R。我们正在考虑将 dynamodb 用于大型数据项目,但我们的主要分析师最熟悉 R,因此我们正在探索我们的选择。

4

4 回答 4

3

这是我用于将数据从 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 中的任何内容。

于 2017-05-01T12:22:49.600 回答
2

对于遇到此问题的任何人,现在都有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"
)
于 2020-12-17T03:35:57.693 回答
1

有几种方法可以解决这个问题......让我添加两个:

1- 带有 Hive 和流的 EMR。

Hive 将用于查询 DynamoDB,并可用作 Haddop Streaming 的输入,可用于任何可以从标准 IO 读取和写入的语言,包括 R。

当然,这与典型的 R 程序和环境有很大不同,但它会利用“大数据”工具。

2- JVM 中的 R-ish

如果您使用 JVM 的 R 解释器(例如 Renjin)或 JVM 中的类似语言,您将能够直接使用 AWS Java SDK 和 DynamoDB 库,这对开发人员来说可能更熟悉,但您将负责处理数据的“大”。

于 2014-04-08T15:00:32.390 回答
1

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"}}}}'

没有提到的另外两个选项是RcpprJava。Java 和 C++ 中都有本机 SKD。

于 2018-10-20T21:36:35.843 回答