我正在使用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
答案 0 :(得分:1)
由于将错误的jar用于mongo-java-driver,我遇到了相同的错误。 从
引发NoSuchFieldErrororg.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
***
***
,并注意driverExtraClassPath
,driverExtraLibraryPath
。
检查这些路径,如果这些路径内存在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"