J'ai installé Hadoop-Spark
sur ma machine locale. J'ai essayé de me connecter à AWS S3
et j'ai réussi à le faire. J'ai utilisé hadoop-aws-2.8.0.jar
à cette fin. Cependant, j'ai essayé de me connecter à DynamoDB
en utilisant EMR fourni fichier Jar emr-ddb-hadoop.jar
. J'ai installé toutes les dépendances AWS et sont disponibles localement. Mais, j'ai toujours eu l'exception suivante.L'installation locale d'étincelle ne fonctionne pas comme prévu
java.lang.ClassCastException: org.apache.hadoop.dynamodb.read.DynamoDBInputFormat cannot be cast to org.apache.hadoop.mapreduce.InputFormat
Voici mon extrait de code.
import sys
import os
if 'SPARK_HOME' not in os.environ:
os.environ['SPARK_HOME'] = "/usr/local/Cellar/spark"
os.environ[
'PYSPARK_SUBMIT_ARGS'] = '--jars /usr/local/Cellar/hadoop/2.8.0/libexec/share/hadoop/tools/lib/emr-ddb-hadoop.jar,' \
'/home/aws-java-sdk/1.11.201/lib/aws-java-sdk-1.11.201.jar pyspark-shell'
sys.path.append("/usr/local/Cellar/spark/python")
sys.path.append("/usr/local/Cellar/spark/python")
sys.path.append("/usr/local/Cellar/spark/python/lib/py4j-0.10.4-src.zip")
try:
from pyspark.sql import SparkSession, SQLContext, Row
from pyspark import SparkConf, SparkContext
from pyspark.sql.window import Window
import pyspark.sql.functions as func
from pyspark.sql.functions import lit, lag, col, udf
from pyspark.sql.types import StructType, StructField, StringType, IntegerType, FloatType, DoubleType, TimestampType, LongType
except ImportError as e:
print("error importing spark modules", e)
sys.exit(1)
spark = SparkSession \
.builder \
.master("spark://xxx.local:7077") \
.appName("Sample") \
.getOrCreate()
sc = spark.sparkContext
conf = {"dynamodb.servicename": "dynamodb", \
"dynamodb.input.tableName": "test-table", \
"dynamodb.endpoint": "http://dynamodb.us-east-1.amazonaws.com/", \
"dynamodb.regionid": "us-east-1", \
"mapred.input.format.class": "org.apache.hadoop.dynamodb.read.DynamoDBInputFormat"}
dynamo_rdd = sc.newAPIHadoopRDD('org.apache.hadoop.dynamodb.read.DynamoDBInputFormat',
'org.apache.hadoop.io.Text',
'org.apache.hadoop.dynamodb.DynamoDBItemWritable',
conf=conf)
dynamo_rdd.collect()
Essayé aussi. Vous avez la même trace d'erreur. Causé par: java.lang.ClassNotFoundException: com.amazonaws.services.dynamodbv2.model.AttributeValue – ZZzzZZzz
On dirait que votre emr-ddb-hadoop.jar n'a pas ce fichier de classe. J'ai vérifié dans mon pot et il est là. – Kannaiyan
Je l'ai téléchargé de maven repo. Un lien pour obtenir votre fichier jar? – ZZzzZZzz