簡體   English   中英

MongoDB Spark 連接器 py4j.protocol.Py4JJavaError:調用 o50.load 時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM