我想将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构建工具来构建它:
mvn clean install
。 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上的答案表明应该如此。