0

我成功地使用了 Elasticsearch Spark 7.12.0 和 PySpark 2.4.5。读和写都很完美。现在,我正在测试升级到 Spark 3.1.1,这种集成不再起作用。PySpark 在 2.4.5 和 3.1.1 之间没有代码更改。

有兼容的插件吗?有没有人让它与 PySpark 3.1.1 一起使用?

错误:

在此处输入图像描述

4

1 回答 1

2

尝试使用包org.elasticsearch:elasticsearch-spark-30_2.12:7.13.1

您看到的错误 ( java.lang.NoClassDefFoundError: scala/Product$class) 通常表明您正在尝试使用为不兼容的 Scala 版本构建的包。

如果您使用的是 Elasticsearch 的最新 zip 包,截至您提出问题之日,它仍然是为 Scala v11 构建的,根据此处的对话: https ://github.com/elastic/elasticsearch-hadoop/pull/ 1589

您可以通过以下方式确认用于构建 PySpark 的 Scala 版本

spark-submit --version

从命令行。在 Spark 标志之后,它会说类似

Using Scala version 2.12.10

您需要查看此页面: https ://www.elastic.co/guide/en/elasticsearch/hadoop/current/install.html 在该页面上,您可以看到兼容性矩阵。

Elastic 在此处为您提供有关 Hadoop 的“安装”的一些信息:https ://www.elastic.co/guide/en/elasticsearch/hadoop/current/install.html

对于 Spark,它提供了以下功能:

<dependency>
 <groupId>org.elasticsearch</groupId>
 <artifactId>elasticsearch-spark-30_2.12</artifactId> 
 <version>7.14.0</version>
</dependency>

现在,如果您使用的是 PySpark,您可能对 Maven 不熟悉,因此我可以理解,给予 maven 依赖项并没有太大帮助。

这是让 maven 为您获取 jar 的最小方法,而不必陷入不熟悉的工具的杂草中。

安装 maven ( apt install maven)

创建一个新目录

在该目录中,创建一个名为 pom.xml 的文件

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>spark-es</groupId>
<artifactId>spark-esj</artifactId>
<version>1</version>
<dependencies>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch-spark-30_2.12</artifactId>
        <version>7.14.0</version>
    </dependency>
</dependencies>

保存该文件并创建一个名为“targetdir”的附加目录(它可以被称为任何东西)

然后

mvn dependency:copy-dependencies -DoutputDirectory=targetdir

你会在 targetdir 中找到你的 jar。

于 2021-06-09T12:07:17.450 回答