AWS dynamodb支持" R"编程语言

时间:2013-01-08 22:11:18

标签: r amazon-web-services amazon-dynamodb

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

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

唉,没有R.我们正在考虑将dynamodb用于大规模数据项目,但我们的主要分析师在R中最为舒适,所以我们正在探索我们的选择。

4 个答案:

答案 0 :(得分:2)

这里是我用来从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)

现在,您将拥有一个名为&#34; df&#34;的数据帧。与您放在DynamoDB中的任何内容。

答案 1 :(得分:1)

有几种方法......让我加两个:

1-带有Hive和Streaming的EMR。

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

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

JVM中的2-R-ish

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

答案 2 :(得分:0)

Cloudyr's 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。

答案 3 :(得分:0)

对于遇到此问题的任何人,现在都有Paws package,这是一个适用于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"
)