【发布时间】:2021-06-14 06:22:11
【问题描述】:
我有一个来自 Java 程序的 Java jar,如果我在 IntelliJ IDEA 中本地运行 Java 程序,它运行良好。
当我将 Java 程序编译成 jar 文件时。
如果我以java -cp jarFileName.jar com.pathToclass.ClassName inputArguments 运行程序,它运行良好。
但是,当我以
spark-submit --master local[4] --class com.pathToclass.ClassName jarFileName.jar inputArguments,当Java代码运行到read.textFile函数时出现如下错误。
代码如下:
DataFrameReader read = spark.read();
JavaRDD<String> stringJavaRDD = read.textFile(inputPath).javaRDD();
在 inputPath 中,有一些 csv 文件。使用spark-submit运行时的错误信息如下:
org.apache.spark.sql.AnalysisException: Multiple sources found for text (org.apache.spark.sql.execution.datasources.v2.text.TextDataSourceV2, org.apache.spark.sql.execution.datasources.text.TextFileFormat), please specify the fully qualified class name.;
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:707)
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSourceV2(DataSource.scala:733)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:248)
at org.apache.spark.sql.DataFrameReader.text(DataFrameReader.scala:843)
at org.apache.spark.sql.DataFrameReader.textFile(DataFrameReader.scala:880)
at org.apache.spark.sql.DataFrameReader.textFile(DataFrameReader.scala:852)
at com.three2three.bigfoot.vola.NormalizeSnapshotSigmaAxisImpliedVola.main(NormalizeSnapshotSigmaAxisImpliedVola.java:306)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:928)
at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:180)
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:203)
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:90)
at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:1007)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1016)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我尝试在IntelliJ IDEA中本地调试,在IDEA中运行时发现数据源为org.apache.spark.sql.execution.datasources.text.TextFileFormat。
好像以spark-submit运行时,this.source()是text,scala代码找到了两个数据源:
org.apache.spark.sql.execution.datasources.v2.text.TextDataSourceV2
org.apache.spark.sql.execution.datasources.text.TextFileFormat
为什么会这样?为什么代码只有在spark-submit模式下运行失败,而在其他运行方式下成功?在spark-submit模式下运行报错如何解决?
我测试了使用spark-submit 运行。它在一台 Linux 服务器上运行,但在我的 Windows PC 和另一台 Linux 服务器上失败了(使用不同版本的 hadoop 和 spark)。
更新,在一些帖子中,声称如果指定格式,则可以避免mutiple source found for ...这样的错误。
例如在这篇文章中:https://github.com/AbsaOSS/ABRiS/issues/147,他们进行了硬编码
df = (
spark
.readStream
.schema(stream_schema)
.format("org.apache.spark.sql.execution.datasources.json.JsonFileFormat")
.load("path_to_stream_directory")
)
“为 json 找到多源”错误消失了。同样,我看到了有关 csv 格式的帖子。但在我的情况下,我尝试使用硬编码格式,它也不起作用。
【问题讨论】:
-
使用
spark-submit运行时,在Linux 服务器上运行时效果很好。但是,在 Windows 电脑上运行时失败,错误消息Spark Multiple sources found for text -
我安装了最新版本的 spark、hadoop 和 java。现在同样的错误再次发生。我的版本是 Debian 10, hadoop-3.2.2, java: openjdk version "1.8.0_282" , spark: spark.3.1.1-bin-hadoop3.2
-
“为镶木地板找到多个来源”的类似错误:issues.apache.org/jira/browse/SPARK-24427,以及“为 csv 找到多个来源”:stackoverflow.com/questions/50884599/…
标签: java scala apache-spark apache-spark-sql