读取或写入Parquet格式数据时出错



我创建了一个指向带有镶木地板存储的Azure ADLS的外部表,在将数据插入该表时,我收到以下错误。我正在使用Databricks执行

org.apache.spark.sql.AnalysisException: Multiple sources found for parquet (org.apache.spark.sql.execution.datasources.v2.parquet.ParquetDataSourceV2, org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat), please specify the fully qualified class name.;

这昨天运行得很好,从今天开始我就开始犯这个错误了。

我在网上找不到任何关于为什么会发生这种事的答案。

这个问题已经修复,错误的原因是,我们安装了Azure提供的带有uber jar的spark sqldb连接器,该连接器还获得了wrt parquet文件格式化程序的依赖项。

如果您想要一个不清理依赖项的解决方法。以下是您如何选择其中一个源(以"org.apache.spark.sql.expension.datasources.parquet.ParquetFileFormat"为例(:

替换:

spark.read.parquet("<path_to_parquet_file>")

spark.read.format("org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat").load("<path_to_parquet_file>")

例如,spark/jars/目录中可能有多个jar文件-spark-sql_2.12-2.4.4和spark-sql.2.12-3.0.3,这可能导致多类问题。

我也遇到过类似的问题,这是由Jar包依赖冲突引起的。我使用maven将我的spark jar与maven shade插件打包,该插件排除了冲突的jar。它对我有效。

这是pom.xml 的代码

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<artifactSet>
<excludes>
<exclude>org.scala-lang:*:*</exclude>
<exclude>org.apache.spark:*:*</exclude>
</excludes>
</artifactSet>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<finalName>spark_anticheat_shaded</finalName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>

最新更新