将镶木地板文件从S3加载到DynamoDB

时间:2019-04-23 05:03:18

标签: amazon-web-services amazon-s3 amazon-dynamodb amazon-emr parquet

我一直在寻找将S3的Parquet文件加载(基本上为空并还原)到DynamoDB的选项。 Parquet文件本身是通过在EMR群集上运行的spark作业创建的。这里有几件事要记住,

  1. 我无法使用AWS Data Pipeline
  2. 文件将包含数百万行(例如1000万行),因此需要一种有效的解决方案。我相信boto API(即使使用批处理写)可能效率不高?

还有其他选择吗?

2 个答案:

答案 0 :(得分:0)

您能否仅在Spark RDD中引用Parquet文件并将工作人员的条目放入dynamoDB?忽略将DynamoDB客户端缓存在每个工作器中以在不同的行中重复使用的挑战,花一点点时间才能完成一行,为dynamo和PUT建立一个条目就足够了。

顺便说一句:在这里按需使用DynamoDB,因为它可以很好地处理峰值负载,而无需提交某些SLA。

答案 1 :(得分:0)

查看以下答案: https://stackoverflow.com/a/59519234/4253760

解释过程:

  1. 创建所需的数据框
  2. 使用.withColumn创建新列,并使用psf.collect_list将其转换为所需的collection / json格式。 相同的数据框。
  3. 删除所有不必要的(表格形式的)列,并仅将JSON格式的Dataframe列保留在Spark中。
  4. 按照答案中的说明将JSON数据加载到DynamoDB中。

我的个人建议:无论您做什么,都不要使用RDD。即使在Scala中,RDD接口也比任何语言的Dataframe API慢2-3倍。 只要您不使用UDF,Dataframe API的性能就与编程语言无关。