我的问题是使用官方连接器从Apache Spark连接到MongoDB。
堆栈版本如下:
2.2.0.2.6.3.0-235
)我使用这些罐子:
他们都说,自Spark 2.2.0以来的方法was renamed所以我需要使用2.2.0版本的连接器 - 是的,here是spark连接器2.1中的方法.1,here在2.2.0中重命名为
但我相信,我使用的是正确的。我做了这些步骤:
git clone https://github.com/mongodb/mongo-spark.git
cd mongo-spark
git checkout tags/2.2.0
sbt check
sbt assembly
scp target/scala-2.11/mongo-spark-connector_2.11-2.2.0.jar user@remote-spark-server:/opt/jars
所有测试都没问题。之后我使用pyspark和Zeppelin(所以部署模式是客户端)从MongoDB读取一些数据:
df = sqlc.read.format("com.mongodb.spark.sql.DefaultSource") \
.option('spark.mongodb.input.uri', 'mongodb://user:password@172.22.100.231:27017,172.22.100.234:27017/dmp?authMechanism=SCRAM-SHA-1&authSource=admin&replicaSet=rs0&connectTimeoutMS=300&readPreference=nearest') \
.option('collection', 'verification') \
.option('sampleSize', '10') \
.load()
df.show()
得到了这个错误:
Py4JJavaError: An error occurred while calling o86.load.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure:
Lost task 0.3 in stage 0.0 (TID 3, worker01, executor 1): java.lang.NoSuchMethodError:org.apache.spark.sql.catalyst.analysis.TypeCoercion$.findTightestCommonTypeOfTwo()Lscala/Function2;
我认为这个方法不在jar中:TypeCoercion$.findTightestCommonTypeOfTwo()
我转到SparkUI并查看环境:
spark.repl.local.jars file:file:/opt/jars/mongo-spark-connector-assembly-2.2.0.jar,file:/opt/jars/mongo-java-driver-3.6.1.jar
并且在任何地方都没有与MongoDB相关的文件。 请帮忙,我做错了什么?提前致谢
答案 0 :(得分:0)