开发环境的spark版本是3.1.3 在安装pytispark的依赖的pyspark版本是2.3.3
在执行初始化sparkSession的时候会出现
py4j.protocol.Py4JError: org.apache.spark.api.python.PythonUtils.getEncryptionEnabled does not exist in JVM 搜索了一下这个异常貌似是pyspark版本和spark环境版本不一致的原因。那是否意味着如果想使用pytispark spark集群必须使用spark2.3.3这个版本在spark3上无法提交pytispark程序
你引入的tispark是哪个版本啊?
./bin/pyspark --jars /where-ever-it-is/tispark-${name_with_version}.jar
就是这个name_with_version是多少
2.5.0
1 个赞
我把spark环境改成2.3.3 把tispark的jar包改为 2.4.1程序就能跑起来 但是这种环境没办法上生产环境啊
1 个赞
找了一下一些版本说明,不知道是不是能帮到你:https://spark.apache.org/docs/3.1.3/api/python/getting_started/install.html
我这边的环境,生产里面没有pyspark,测试环境的pyspark版本都是与spark对应的,而且基础环境都是python3,你能不能把pyspark和spark版本对应起来测测看,按说跨大版本比较容易出问题,大佬们帮忙看看,有过这方面实践么。
https://github.com/pingcap/tispark/wiki/PySpark
参考一下官方的说明,其中:
TiSpark 版本 | Spark 版本 | 是否需要 pytispark |
---|---|---|
< 2.0 | < 2.3 | ![]() |
2.4.x | 2.3.x 2.4.x | pyspark ![]() ![]() |
2.5.x | > 3.0 | ![]() |
简单来说,
tispark < 2.0和spark < 2.3,必须使用pytispark
tipsark 2.4.x 和 spark 2.3.x 2.4.x 在spark-sumbit情况下使用pytispark,其他情况直接使用
tipsark 2.5.x 和 spark > 3.0 直接使用
tipsark 2.5.x 和 spark > 3.0,参考代码如下:
- 配置 spark-defaults.conf
spark.sql.extensions org.apache.spark.sql.TiExtensions
spark.tispark.pd.addresses ${your_pd_adress}
spark.sql.catalog.tidb_catalog org.apache.spark.sql.catalyst.catalog.TiCatalog
spark.sql.catalog.tidb_catalog.pd.addresses ${your_pd_adress}
- 启动 pyspark
pyspark --jars tispark-assembly-{version}.jar
- Read
spark.sql("use tidb_catalog")
spark.sql("select count(*) from ${database}.${table}").show()
- Write
df1 = spark.sql("select * from ${src_database}.${src_table}").show()
df1.write
.format("tidb")
.option("database", ${target_database})
.option("table", ${target_table})
.option("tidb.addr","127.0.0.1")
.option("tidb.password","")
.option("tidb.port","4000")
.option("tidb.user","root")
.mode("append")
.save()
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。