gpt4 book ai didi

java - 无法通过 MongoDB 连接器使用 Spark SQL 查询 MongoDB

转载 作者:行者123 更新时间:2023-12-02 09:40:03 25 4
gpt4 key购买 nike

我想要实现的最终目标是我想使用 Scala 代码作为独立应用程序通过 Spark SQL 查询我的 MongoDB 集合。我已在运行“Windows 10”操作系统的本地成功安装 Spark。我可以运行spark-shell、Spark Master节点和worker节点。所以从它的外观来看,apache Spark 在我的电脑上运行良好

我还可以通过在 Spark Shell 中运行 scala 代码来查询我的 MongoDB 集合。

问题:

当我尝试使用 Scala 项目中的相同代码(使用 MongoDB Spark Connector for scala)时。我遇到了一个我无法弄清楚的错误。 IT似乎是一个环境问题,我查了一下,很多人建议如果你使用Java 9或更高版本就会发生这种情况。我使用的是 Java 8,所以这不是我的问题。这就是为什么我还在帖子中发布了我的 java 版本快照。

但是当我运行代码时,出现以下错误。如果有人可以在任何方向上为我提供建议,那将是很大的帮助。

Scala 代码:

import org.apache.spark.sql.SparkSession
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession
import com.mongodb.spark.config._
import com.mongodb.spark._

object SparkSQLMongoDBConnector {

def main(args: Array[String]): Unit ={

var sc: SparkContext = null

var conf = new SparkConf()
conf.setAppName("MongoSparkConnectorIntro")
.setMaster("local")
.set("spark.hadoop.validateOutputSpecs", "false")
.set("spark.mongodb.input.uri","mongodb://127.0.0.1/metadatastore.metadata_collection?readPreference=primaryPreferred")
.set("spark.mongodb.output.uri","mongodb://127.0.0.1/metadatastore.metadata_collection?readPreference=primaryPreferred")

sc = new SparkContext(conf)
val spark = SparkSession.builder().master("spark://192.168.137.221:7077").appName("MongoSparkConnectorIntro").config("spark.mongodb.input.uri", "mongodb://127.0.0.1/metadatastore.metadata_collection?readPreference=primaryPreferred").config("spark.mongodb.output.uri", "mongodb://127.0.0.1/metadatastore.metadata_collection?readPreference=primaryPreferred").getOrCreate()


val readConfig = ReadConfig(Map("collection" -> "spark", "readPreference.name" -> "secondaryPreferred"), Some(ReadConfig(sc)))
val customRdd = MongoSpark.load(sc, readConfig)

println(customRdd.count)
println(customRdd.first.toString())


}

}

SBT:

 scalaVersion := "2.12.8"
libraryDependencies += "org.mongodb.spark" %% "mongo-spark-connector" % "2.4.0"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.0"

Java 版本:

enter image description here

错误:

这是我在 IntelliJ 中运行 Scala 代码时遇到的错误。

Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:79)
at org.apache.hadoop.security.Groups.parseStaticMapping(Groups.java:116)
at org.apache.hadoop.security.Groups.<init>(Groups.java:93)
at org.apache.hadoop.security.Groups.<init>(Groups.java:73)
at org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:293)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:283)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:260)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInorg.apache.spark.util.Utils$.$anonfun$getCurrentUserName$1(Utils.scala:2422)
at scala.Option.getOrElse(Option.scala:138)
at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2422)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:293)
at SparkSQLMongoDBConnector$.main(SparkSQLMongoDBConnector.scala:35)
at SparkSQLMongoDBConnector.main(SparkSQLMongoDBConnector.scala)
Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end 3, length 2
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3410)
at java.base/java.lang.String.substring(String.java:1883)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:50)
... 16 more

任何帮助将不胜感激。

最佳答案

Shell 通过 java.version 变量检查您的 Java 版本

private static boolean IS_JAVA7_OR_ABOVE =
System.getProperty("java.version").substring(0, 3).compareTo("1.7") >= 0;

确保它已定义。

此行在 Hadoop 2.7+ 中进行了更改,但默认情况下,Spark 使用 2.6.5。

关于java - 无法通过 MongoDB 连接器使用 Spark SQL 查询 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com