如何使用pyspark通过emr-dynamodb-connector读取表

时间:2019-01-29 23:14:02

标签: python apache-spark pyspark amazon-dynamodb

我想将pyspark与emr-dynamodb-connector一起使用,以将整个dynamodb表读入rdd或最好是数据帧中。我的代码如下。

dynamodb.py

from pyspark import SparkContext
from pyspark.sql import SparkSession

sc = SparkContext.getOrCreate()
spark = SparkSession(sc)

conf = {
    "dynamodb.servicename": "dynamodb",
    "dynamodb.input.tableName": "user_state_test",
    "dynamodb.output.tableName": "user_state_test",
    "dynamodb.endpoint": "https://dynamodb.us-west-2.amazonaws.com",
    "dynamodb.regionid": "us-west-2",
    "mapred.output.format.class": "org.apache.hadoop.dynamodb.write.DynamoDBOutputFormat",
    "mapred.input.format.class": "org.apache.hadoop.dynamodb.read.DynamoDBInputFormat"
}

dynamoRDD = sc.hadoopRDD(
    inputFormatClass="org.apache.hadoop.dynamodb.read.DynamoDBInputFormat",
    keyClass="org.apache.hadoop.io.Text",
    valueClass="org.apache.hadoop.dynamodb.DynamoDBItemWritable",
    conf=conf
)

count = dynamoRDD.count()
print(count)

为了提供emr连接器,我根据awslabs instructions使用了maven构建工具来构建它:

  1. 克隆存储库
  2. mvn clean install
  3. 该生成将在回购的emr-dynamodb-hadoop目录中的目标目录(称为emr-dynamodb-hadoop-4.8.0-SNAPSHOT.jar)中创建一个新的jar。我将此罐子复制到了我的代码所在的存储库中,并将其重命名为emr-dynamodb-hadoop.jar

我使用以下命令提交我的spark作业:

spark-submit --master "local[4]" --jars /Users/vaerk/dev/myproject/emr-dynamodb-hadoop.jar dynamodb.py

此代码导致以下异常:java.lang.ClassNotFoundException: com.amazonaws.services.dynamodbv2.model.AttributeValue

我的问题:

  • AttributeValue中是否包含emr-dynamodb-hadoop.jar类? this question上的答案表明应该如此。
  • 我的spark提交是否正确地将jar加载到类路径上?
  • 当然,要使它正常工作,我需要做什么?

0 个答案:

没有答案