我成功地使用了 Elasticsearch Spark 7.12.0 和 PySpark 2.4.5。读和写都很完美。现在,我正在测试升级到 Spark 3.1.1,这种集成不再起作用。PySpark 在 2.4.5 和 3.1.1 之间没有代码更改。
有兼容的插件吗?有没有人让它与 PySpark 3.1.1 一起使用?
错误:
我成功地使用了 Elasticsearch Spark 7.12.0 和 PySpark 2.4.5。读和写都很完美。现在,我正在测试升级到 Spark 3.1.1,这种集成不再起作用。PySpark 在 2.4.5 和 3.1.1 之间没有代码更改。
有兼容的插件吗?有没有人让它与 PySpark 3.1.1 一起使用?
错误:
尝试使用包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。