使用 maven 制作 fat jar 时出现“无法找到数据源:parquet”

2023-11-24

我正在使用 Maven 组装插件组装 fat jar 并遇到以下问题:

Exception in thread "main" java.lang.ClassNotFoundException: Failed to find data source: parquet. Please find packages at http://spark-packages.org
    at org.apache.spark.sql.execution.datasources.DataSource.lookupDataSource(DataSource.scala:145)
    at org.apache.spark.sql.execution.datasources.DataSource.providingClass$lzycompute(DataSource.scala:78)
    at org.apache.spark.sql.execution.datasources.DataSource.providingClass(DataSource.scala:78)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:310)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149)
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:427)
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:411)
    at org.apache.spark.mllib.classification.impl.GLMClassificationModel$SaveLoadV1_0$.loadData(GLMClassificationModel.scala:77)
    at org.apache.spark.mllib.classification.LogisticRegressionModel$.load(LogisticRegression.scala:183)
    at org.apache.spark.mllib.classification.LogisticRegressionModel.load(LogisticRegression.scala)
    at my.test.spark.assembling.TopicClassifier.load(TopicClassifier.java:35)
    at my.test.spark.assembling.Main.main(Main.java:23)
Caused by: java.lang.ClassNotFoundException: parquet.DefaultSource
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$5$$anonfun$apply$1.apply(DataSource.scala:130)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$5$$anonfun$apply$1.apply(DataSource.scala:130)
    at scala.util.Try$.apply(Try.scala:192)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$5.apply(DataSource.scala:130)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$5.apply(DataSource.scala:130)
    at scala.util.Try.orElse(Try.scala:84)
    at org.apache.spark.sql.execution.datasources.DataSource.lookupDataSource(DataSource.scala:130)
    ... 11 more

这是 pom.xml:

<groupId>my.test.spark</groupId>
<artifactId>assembling</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>


<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-mllib_2.11</artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.0.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>

如果我在 Intellij IDEA 中运行它,则不会出现问题。

我还应该在 jar 中添加什么才能找到该类?


我找到了问题的解决方案。我尝试使用以下命令构建软件包sbt assembly并经历了不同但相关的问题。我在这里找到的解决方案:https://stackoverflow.com/a/27532248/5520896也有助于解决我原来的问题。

所以解决问题的方法是从 Maven Assembly 插件转移到 Maven Shade 插件并应用 Transformer

<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>

所以我最终的 pom.xml 插件配置如下:

        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <createDependencyReducedPom>false</createDependencyReducedPom>

                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <transformers>                                
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

显然这里解释了 Maven 组装出现的问题:https://stackoverflow.com/a/21118824/5520896

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 maven 制作 fat jar 时出现“无法找到数据源:parquet” 的相关文章

随机推荐

  • 使用 Rust 稳定通道和夜间通道并行编译代码有多困难?

    Cargo 创建的默认文件树允许并行编译发布和调试版本 因为它们位于自己的目录中 target release and target debug 分别 允许并行编译有多困难stable nightly 编译器 例如使用目录 target d
  • 在 R 中合并两个列表

    我有两个清单 first list a 1 b 2 c 3 second list a 2 b 3 c 4 我想合并这两个列表 所以最终产品是 a 1 1 2 b 1 2 3 c 1 3 4 有一个简单的函数可以做到这一点吗 如果列表始终具
  • 更新部分主键Entity Framework 4.0

    我有一个带有复合主键的表 3 列 UTP ID ITEMId UTS ID CategoryID USS ID SubCategoryID 例如 当我尝试使用 EF 4 更改 SubCategory 时 出现以下错误 utl USS ID
  • 写入帧缓冲区

    我使用的是带有内置图形加速器 GMA HD 的 i5 内核 在 RHEL 6 0 操作系统上运行 我需要测试显卡驱动程序的图形加速能力 我发现我的电脑上是i915 我使用以下代码 我从互联网上获得并进行了一些修改 来写入帧缓冲区 inclu
  • 多行搜索替换为 Perl

    我知道这类问题以前已经被问过很多次了 我再次来到这里的原因是我觉得我错过了一些简单而基本的东西 是否有可能使这种搜索替换例程变得更好 例如 无需打开同一文件两次 也欢迎与速度相关的建议 请注意 这适用于多行匹配并替换多行字符串 bin pe
  • 如何将 2D Eigen::Tensor 更改为 Eigen::Matrix

    看起来很简单 我本以为某种类型的转换是可能的 但我似乎找不到任何相关文档 虽然我在应用程序中找到了避免使用 Eigen Matrix 类的方法 但 TensorFlow 仅适用于 Eigen Tensor 而我使用的另一个库仅具有直接使用
  • Python将字符串拆分为多个字符串[重复]

    这个问题在这里已经有答案了 可能的重复 在Python中将字符串分割成列表 我有一个带有很多部分字符串的字符串 gt gt gt s str1 str2 str3 str4 现在我有一个类似以下的功能 gt gt gt def f args
  • 迁移到 rbenv 会破坏乘客 (nginx)

    我在生产服务器上从 RVM 迁移到 rbenv 我使用 rvm implode 卸载了 rvm 并安装了 rbenv ruby 1 9 2 rails passenger 和 nginx module 除了按如下方式更改 Passenger
  • 查找 numpy 数组中最接近的值

    我如何找到最接近的值在 numpy 数组中 例子 np find nearest array value import numpy as np def find nearest array value array np asarray ar
  • 如何缩短 ggplot 中的 x 轴标签文本?

    我正在 ggplot 中绘制一个图 其中 x 轴标签包含不同蛋白质的名称 但我遇到了麻烦 因为其中一些名称太长 并且标签变得太大 以至于很难看到图 有什么方法可以减少 x 轴标签中的字符数 而不是 打印 更大的图表 这是一个显示我的问题的示
  • Bash - 计算输入数字的平均值

    需要有关 Linux Bash 脚本的帮助 本质上 运行脚本时会要求用户提供三组数字 然后计算输入的数字并得出平均值 bin bash echo Enter a number read a while a do echo Enter a s
  • 如何解决 Bash 命令替换中的错误“bash: !d': event not found”[重复]

    这个问题在这里已经有答案了 我正在尝试解析 VNC 服务器启动事件的输出 但在命令替换中使用 sed 进行解析时遇到了问题 具体地 远程VNC服务器的启动方式如下 address1 email protected VNCServerResp
  • MySQL LAST_INSERT_ID() 与多记录 INSERT 语句一起使用

    如果我使用执行单个记录插入的循环插入多个记录 则返回的最后一个插入 ID 正如预期的那样 是最后一个 但是如果我执行多条记录插入语句 INSERT INTO people name age VALUES William 25 Bart 15
  • 弱分类器

    我正在尝试实现一个使用 AdaBoost 算法的应用程序 我知道 AdaBoost 使用一组弱分类器 但我不知道这些弱分类器是什么 你能用一个例子向我解释一下 并告诉我是否必须创建自己的弱分类器或者我应该使用某种算法吗 弱分类器 或弱学习器
  • 在 C++ 中不使用指针和使用常规对象可以进行动态绑定吗

    include
  • 如何在本地测试 Chromium/Chrome 扩展的内联安装?

    我正在尝试按照本文档测试 Chrome 网上应用店的内联安装功能 https developers google com chrome web store docs inline installation 我正在本地开发此程序以进行测试 并
  • 如何在 Oracle SQL 中选择直到特定字符的子字符串?

    假设我有一个表列 其结果如下 ABC blahblahblah DEFGH moreblahblahblah IJKLMNOP moremoremoremore 我希望能够编写一个查询 从所述表中选择此列 但仅返回到下划线 字符的子字符串
  • 使用语言环境设置将西班牙日期转换为 python pandas datetime 对象

    我有 2 个问题 如何使用以下命令将西班牙语日期时间 ago122010 转换为 2010 08 12pandas 使用的格式是strptime正确的 我尝试过以下方法 import locale locale setlocale loca
  • 使用 C# 检查进程是否正在远程系统上运行

    我正在尝试检查进程是否正在远程系统上运行 我正在使用以下代码 string procSearc notepad string remoteSystem remoteSystemName Process proce System Diagno
  • 使用 maven 制作 fat jar 时出现“无法找到数据源:parquet”

    我正在使用 Maven 组装插件组装 fat jar 并遇到以下问题 Exception in thread main java lang ClassNotFoundException Failed to find data source