为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:5.7.25-TiDB-v4.0.3
- 【spark 版本】:2.1.1
- 【问题描述】:阅读tispark文档时,如下几个问题:
1.tispark的DataFrame写tikv是锁表?还是锁行?
11.1.1 概述
2.是否有dataframe写tikv的代码demo,难道就如下一行就可以?还是怎么写?
spark.sql("insert into table tidb_tb select * from df_tb");
3.看了下tispark 1.2.1只支持jdbc的方式写入,和rdd.forEachPartition区别不大?那follow-up是从tispark哪个版本才开始支持tispark直接写tikv?
https://github.com/pingcap/tispark/blob/master/docs/userguide_spark2.1.md
birdstorm
(Birdstorm - PingCAP)
2
从 TiSpark v2.3 开始,TiSpark 才开始支持直接写入 TiKV
可以参考 TiSpark 写入的文档:https://github.com/pingcap/tispark/blob/master/docs/userguide.md#load-spark-dataframe-into-tidb-using-tidb-connector
如果希望使用直接写入的特性,并且使用的是旧版本的 TiSpark,需要更新至至少 TiSpark v2.3,所需要的 TiDB 集群版本为 v3.0.14 及以上,支持的 Spark 版本为 Spark v2.3/v2.4 。
可以参考一下文档了解详细的版本兼容细节:https://github.com/pingcap/tispark#how-to-choose-tispark-version
birdstorm
(Birdstorm - PingCAP)
4
目前 2.1.1 的 Spark 版本没办法支持直接写入,因为 TiSpark 直接写入的功能依赖了 DataSourceAPI v2 这个只有 Spark v2.3 之后才支持的 API。如果要保持 2.1 的 Spark,可以暂时使用 jdbc 的方式。
https://issues.apache.org/jira/browse/SPARK-15689
birdstorm
(Birdstorm - PingCAP)
6