我有一个java应用程序,它使用spark来访问来自各种数据源(hadoop、本地文件系统等)的各种格式(json、avro等)的数据。
SparkSession spark = SparkSession
.builder()
.appName("Spark app")
.master("local")
.getOrCreate();
Dataset<Row> dataset = spark
.read()
.format(FORMAT)) // avro, json, ...
.load(FILEPATH);
我能够创建 fat jar 并通过“java -jar”运行它。只要我使用 JSON 作为“格式”就没有问题。但是如果“JSON”被“AVRO”替换,那么它会抛出无法找到数据源:AVRO的异常。从 Spark 2.4 开始,Avro 是内置但外部的数据源模块。如果我直接在(IDE)中运行它,那么即使使用 avro 也可以正常工作,但如果它在 jar 中,则只能使用 JSON。
我知道 avro 是 Spark 的外部数据源,并且必须以某种方式将其添加到 Spark,但不知道如何以及是否可以仅通过 java -jar app.jar -param - 运行此类应用程序参数1
最佳答案
问题出在 Maven 构建插件中。我使用的是 maven-assemble-plugin
,但是当我用 maven-shade-plugin
替换它时,一切正常。
关于java - 是否可以使用spark-avro数据源创建Spark应用程序并通过 'java -jar'执行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56005071/