java.lang.NoSuchFieldError:DECIMAL128 mongoDB spark

时间:2018-07-16 11:24:33

标签: python mongodb apache-spark

我正在使用pyspark编写火花作业;我应该只从mongoDB集合中读取内容,然后在屏幕上打印内容;代码如下:

import pyspark
from pyspark.sql import SparkSession

my_spark = SparkSession.builder.appName("myApp").config("spark.mongodb.input.uri", "mongodb://127.0.0.1/marco.weather_test").config("spark.mongodb.output.uri", "mongodb://127.0.0.1/marco.out").getOrCreate()

df = my_spark.read.format("com.mongodb.spark.sql.DefaultSource").option("uri", "mongodb://127.0.0.1/marco.weather_test").load()

#df.printSchema()
df.show()

问题是,当我想打印架构时,该工作有效,但是当我想使用show()函数打印dataFrame的内容时,我得到了错误:

#java.lang.NoSuchFieldError: DECIMAL128

我使用的命令是:

#bin/spark-submit --packages org.mongodb.spark:mongo-spark-connector_2.11:2.2.3 /home/erca/Scrivania/proveTesi/test_batch.py

3 个答案:

答案 0 :(得分:1)

由于将错误的jar用于mongo-java-driver,我遇到了相同的错误。 从

引发NoSuchFieldError
  

org.bson.BsonType.Decimal128

,并且在mongo-java-driver 3.4之后的BsonType类中添加了Decimal128字段。

  

org.mongodb.spark:mongo-spark-connector_2.11:2.2.4

包含mongo-java-driver 3.6.2,版本3.2.1的现有jar“ mongo-java-driver”位于driverExtraClassPath中。

只需用详细的内容启动spark-shell:

  

spark-shell --verbose

即输出:

***
***
Parsed arguments:
  master                  local[*]
  deployMode              null
  executorMemory          1024m
  executorCores           1
  totalExecutorCores      null
  propertiesFile          /etc/ecm/spark-conf/spark-defaults.conf
  driverMemory            1024m
  driverCores             null
  driverExtraClassPath    /opt/apps/extra-jars/*
  driverExtraLibraryPath  /usr/lib/hadoop-current/lib/native
***
***

,并注意driverExtraClassPathdriverExtraLibraryPath

检查这些路径,如果这些路径内存在mongo-java-driver,则将其删除。

答案 1 :(得分:0)

显式导入该库可能会解决该问题,或者为您提供更好的调试错误消息。

import org.bson.types.Decimal128

答案 2 :(得分:0)

我向BSON罐子里下载了一个专业版本,并且有效

(在gradle中)

compile group: 'org.mongodb', name: 'bson', version: '3.10.2',  'force': "true"