我成功地在PySpark 2.4.5中使用了Elasticsearch Spark 7.12.0。读写都很完美。现在,我正在测试升级到Spark 3.1.1,这个集成不再起作用了。在2.4.5和3.1.1之间,PySpark中没有代码更改。
有兼容的插件吗?有没有人把这个用在PySpark 3.1.1上?
错误:

发布于 2021-06-09 20:07:17
尝试使用package org.elasticsearch:elasticsearch-spark-30_2.12:7.13.1
您看到的错误(java.lang.NoClassDefFoundError: scala/Product$class)通常表示您正在尝试使用为不兼容版本的Scala构建的包。
如果您使用的是来自Elasticsearch的最新压缩包,那么在您提出问题时,它仍然是为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。
https://stackoverflow.com/questions/66825892
复制相似问题