【发布时间】:2017-02-26 08:01:32
【问题描述】:
我正在尝试锻炼一个 Apache Spark 应用程序,该应用程序应该在 MongoDB 数据库上运行聚合查询并写回结果。我能够解决问题的 Java 版本,但现在需要使用 RStudio 将其移植到 R 语言。
工作的Java版本:-
public static void main(String args[]) {
SparkConf sparkConf = new SparkConf(true)
.setMaster("local[*]")
.setSparkHome(SPARK_HOME)
.setAppName("SparklingMongoApp")
.set("spark.ui.enabled", "false")
.set("spark.app.id", APP)
.set("spark.mongodb.input.uri", "mongodb://admin:password@host:27017/input_collection")
.set("spark.mongodb.output.uri", "mongodb://admin:password@host:27017/output_collection");
JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
JavaMongoRDD<Document> javaMongoRDD = MongoSpark.load(javaSparkContext);
Dataset<Row> dataset = javaMongoRDD.toDF();
dataset.createOrReplaceTempView(TEMP_VIEW);
// a valid spark sql QUERY
Dataset<Row> computedDataSet = dataset.sqlContext().sql(QUERY);
MongoSpark.save(computedDataSet);
javaSparkContext.close();
}
我正在尝试锻炼的等效 R/RStudio 版本:-
library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib")))
##PROBLEM - Is this correct way of setting configuration?
sparkConfig <- list("spark.driver.memory"="1g","spark.mongodb.input.uri"="mongodb://username:password@localhost:27017/price_subset?authSource=admin","spark.mongodb.output.uri"="mongodb://username:password@localhost:27017/price_subset_output?authSource=admin")
customSparkPackages <- c("org.mongodb.spark:mongo-spark1-connector_2.11:1.0.0");
##Starting Up: SparkSession
##PROBLEM-1 Is this correct way of initializing spark session ?
sparkSession <- sparkR.session(appName="MongoSparkConnectorTour",master = "local[*]",enableHiveSupport = FALSE,sparkConfig = sparkConfig,sparkPackages = customSparkPackages)
##PROBLEM-2 - This complains about being deprecated. How to fix this ?
sqlContext <- sparkRSQL.init(sparkSession)
## Save some data
charactersRdf <- data.frame(list(name=c("Bilbo Baggins", "Gandalf", "Thorin", "Balin", "Kili", "Dwalin", "Oin", "Gloin", "Fili", "Bombur"),
age=c(50, 1000, 195, 178, 77, 169, 167, 158, 82, NA)))
charactersSparkdf <- createDataFrame(sqlContext, charactersRdf)
#PROBLEM-3 This throws an error - Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) :
# java.lang.NoClassDefFoundError: com/mongodb/ConnectionString
write.df(charactersSparkdf, "", source = "com.mongodb.spark.sql.DefaultSource", mode = "overwrite")
我尝试关注 SparkR 文档,但仍然无法锻炼运行示例。
期望:-
在 RStudio 中初始化 spark 会话的正确方法是什么。 MongoDB official sample 不适用于我,因为它仅适用于 SparkShell(它会挂在我的机器上)并且已弃用。我想要可以在 RStudio 中运行的代码 sn-p。
如何修复 java.lang.NoClassDefFoundError。
任何 SparkR 2.x + MongoDB 3.x 代码的示例/参考都将受到高度赞赏。
版本:- 阿帕奇星火 - 2.0.1 爪哇 - 1.8 MongoDB - 3 R - 最新的
【问题讨论】:
-
如果你正在使用 RStudio,你也可以试试他们的 SparklyR 包(它与 RStudio 预览版中的 IDE 集成)。 spark.rstudio.com
标签: r mongodb apache-spark rstudio sparkr