![](/img/trans.png)
[英]Spark py4j.protocol.Py4JJavaError: An error occurred while calling o718.showString
[英]MongoDB Spark Connector py4j.protocol.Py4JJavaError: An error occurred while calling o50.load
我以前能夠加載這個 MongoDB 數據庫,但現在收到一個我無法弄清楚的錯誤。
以下是我開始 Spark 會話的方式:
spark = SparkSession.builder \
.master("local[*]") \
.appName("collab_rec") \
.config("spark.mongodb.input.uri", "mongodb://127.0.0.1/example.collection") \
.config("spark.mongodb.output.uri", "mongodb://127.0.0.1/example.collection") \
.getOrCreate()
我運行這個腳本,以便我可以通過 ipython 與 spark 交互,它加載 mongo spark 連接器包:
#!/bin/bash
export PYSPARK_DRIVER_PYTHON=ipython
${SPARK_HOME}/bin/pyspark \
--master local[4] \
--executor-memory 1G \
--driver-memory 1G \
--conf spark.sql.warehouse.dir="file:///tmp/spark-warehouse" \
--packages com.databricks:spark-csv_2.11:1.5.0 \
--packages com.amazonaws:aws-java-sdk-pom:1.10.34 \
--packages org.apache.hadoop:hadoop-aws:2.7.3 \
--packages org.mongodb.spark:mongo-spark-connector_2.11:2.0.0\
Spark 加載正常,並且看起來包也正確加載。
這是我嘗試將該數據庫加載到數據框中的方式:
df = spark.read.format("com.mongodb.spark.sql.DefaultSource").load()
但是,在那一行,我收到以下錯誤:
Py4JJavaError: An error occurred while calling o46.load.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost, executor driver): java.lang.NoSuchMethodError: org.apache.spark.sql.catalyst.analysis.TypeCoercion$.findTightestCommonTypeOfTwo()Lscala/Function2;
at com.mongodb.spark.sql.MongoInferSchema$.com$mongodb$spark$sql$MongoInferSchema$$compatibleType(MongoInferSchema.scala:132)
at com.mongodb.spark.sql.MongoInferSchema$$anonfun$3.apply(MongoInferSchema.scala:76)
at com.mongodb.spark.sql.MongoInferSchema$$anonfun$3.apply(MongoInferSchema.scala:76)
從我可以通過以下文檔/教程看到的內容,我正在嘗試正確加載數據框:
https://docs.mongodb.com/spark-connector/master/python-api/
我正在使用 Spark 2.2.0 請注意,我已經能夠通過 AWS 在我的 mac 和 linux 上復制此錯誤。
我想出了我的問題的答案。 這是 Mongo-Spark 連接器和我升級到的 Spark 版本的兼容性問題。 具體來說,在 PR 中重命名了 findTightestCommonTypeOfTwo 值:
https://github.com/apache/spark/pull/16786/files
對於 Spark 2.2.0,兼容的 Mongo-Spark 連接器也是 2.2.0,因此在我的示例中,包將按如下方式加載:
--packages org.mongodb.spark:mongo-spark-connector_2.11:2.2.0\
這可能會在未來發生變化,因此在使用連接器時,您應該檢查與正在使用的 Spark 版本的兼容性。
我也遇到同樣的錯誤:
py4j.protocol.Py4JJavaError: An error occurred while calling o763.save.
: com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches WritableServerSelector. Client view of cluster state is {type=REPLICA_SET, servers=[{address=172.xx.xx.xxx:27017, type=REPLICA_SET_SECONDARY, roundTripTime=0.8 ms, state=CONNECTED}]
pyspark版本:2.3.4 mongodb版本:4.2.0連接器,使用:org.mongodb.spark:mongo-spark-connector_2.11:2.3.2
有關更多細節: py4j.protocol.Py4JJavaError:同時呼吁o788.save發生錯誤。 :com.mongodb.MongoTimeoutException,WritableServerSelector預先感謝任何人的幫助。
mongo-spark-connector JAR
文件需要與使用的Spark
版本兼容。
可以在此處下載不同版本的JAR
文件。 並且下載頁面上的XML
文件指示了所需的依賴項
Apache-Spark
Scala
確保這與本地環境中安裝的內容相匹配。
要檢查安裝了哪個版本的Spark
,請在路徑中添加Spark
后運行spark-submit
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.