Я хочу использовать pyspark с emr-динамодб-коннектором , чтобы прочитать всю таблицу динамодаба в 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 я собрал его, используя инструмент сборки maven в соответствии с инструкциями awslabs :
- Клон репо
mvn clean install
. - В результате сборки в целевой директории в директории репозитория
emr-dynamodb-hadoop
появляется новый jar-файл, называемый emr-dynamodb-hadoop-4.8.0-SNAPSHOT.jar
.Я скопировал этот jar-файл в репозиторий, в котором находится мой код, и переименовал его в emr-dynamodb-hadoop.jar
.
Я отправляю свое искровое задание с помощью следующей команды:
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
?Ответы на на этот вопрос указывают на то, что должно быть. - Правильно ли моя искра отправляет эту банку в путь к классам?
- и, конечно, что мне нужносделать, чтобы заставить это работать?