LazyBoolean на pyspark при вставке на MongoDB - PullRequest
0 голосов
/ 13 марта 2020

Мне действительно нужна помощь.

Это повторяющийся вопрос ( py4j.protocol.Py4JJavaError: Ошибка при вызове o59.save.: java .lang.NoClassDefFoundError: scala / runtime / LazyBoolean ) так как ответа нет.

Я пытаюсь вставить Dataframe в MongoDB версии v3.6.17 или v4.2.3, но оба раза не удается. Я попробовал свои собственные данные и пример официальной документации (https://docs.mongodb.com/spark-connector/master/python/write-to-mongodb/), но он возвращает

ava.lang.NoClassDefFoundError: scala / runtime / LazyBoolean

enter image description here

У меня были другие проблемы при попытке выполнить эту простую задачу, например ( Невозможно подключиться к пн go DB через Spark , Приложение Spark и MongoDB в Scala 2.10 ошибка встроенного maven ) и чтение некоторых возможных решений, таких как (https://github.com/mongodb/mongo-spark, https://github.com/mongodb/mongo-spark/blob/master/examples/src/test/python/introduction.py), но без успеха.

Моя версия Spark 2.4.4, Python 3.7.6, я использую IntelliJ 2019.3 в качестве IDE.

enter image description here enter image description here

Мой код выглядит следующим образом:

from pyspark.sql import Row    
from pyspark.sql.types import *
from select import select
#import org.mongodb.spark.sql.DefaultSource  #  ModuleNotFoundError: No module named 'org'
#import org.mongodb.spark                    #  ModuleNotFoundError: No module named 'org'
#import org.bson.Document                    #  ModuleNotFoundError: No module named 'org'
from linecache import cache
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, monotonically_increasing_id


if __name__ == "__main__":

spark = SparkSession \
    .builder \
    .appName("spark_python") \
    .master("local") \
    .getOrCreate()

spark.sparkContext.setLogLevel("ERROR")
print("http://desktop-f5ffrvd:4040/jobs/")

mongo_spark = SparkSession \
        .builder \
        .appName("myApp") \
        .config("spark.mongodb.output.uri", "mongodb://127.0.0.1/test.contacts") \
        .config('spark.jars.packages', 'org.mongodb.spark:mongo-spark-connector_2.12:2.4.1') \
        .getOrCreate()

#   .config("spark.mongodb.input.uri", "mongodb://127.0.0.1/test.contacts") \

people = mongo_spark\
    .createDataFrame([("Bilbo Baggins",  "50"), ("Gandalf", "1000"), ("Thorin", "195"), ("Balin", "178"), ("Kili", "77"), ("Dwalin", "169"), ("Oin", "167"), ("Gloin", "158"), ("Fili", "82"), ("Bombur", "None")], ["name", "age"])

people.show()
people.printSchema()

people\
    .write\
    .format("mongo")\
    .mode("append")\
    .option("database", "test")\
    .option("collection", "contacts")\
    .save()


spark.stop()
mongo_spark.stop()

pom. xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>airbnb_python</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>

        <!-- https://mvnrepository.com/artifact/org.scala-lang/scala-library -->
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.8</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>2.4.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>2.4.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mongodb.spark/mongo-spark-connector -->
                <dependency>
        <groupId>org.mongodb.spark</groupId>
        <artifactId>mongo-spark-connector_2.11</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.8.0</version>
    </dependency>

      </dependencies>
  </project>

пытается следовать документации (https://docs.mongodb.com/spark-connector/master/python-api/#python -basics ), при запуске

pyspark --conf "spark.mongodb.input.uri = mongodb: //127.0.0.1/test.myCollection? readPreference = primaryPreferred" - conf "spark.mongodb.output.uri = mongodb: //127.0.0.1/test.myCollection"
--packages org.mongodb.spark: mon go -spark-connector_2.11: 2.4.1

на консоли Windows, с кодом выше я получаю ту же ошибку. На C: \ Users \ israel.ivy2 \ jars У меня есть два jar: org.mongodb.spark_mon go -spark-connector_2.11-2.3.0 и org.mongodb_mon go - java -driver- 3.8.0.

Я пишу этот вопрос, потому что у меня закончились идеи, я уже проконсультировался с 4 инженером данных, и мне действительно нужна помощь, пожалуйста. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...