tispark写Tikv

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【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

从 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

spark不好动,还要保持2.1.1:rofl:

目前 2.1.1 的 Spark 版本没办法支持直接写入,因为 TiSpark 直接写入的功能依赖了 DataSourceAPI v2 这个只有 Spark v2.3 之后才支持的 API。如果要保持 2.1 的 Spark,可以暂时使用 jdbc 的方式。

https://issues.apache.org/jira/browse/SPARK-15689

那spark 3.0呢?

Spark 3.0 正在支持中。可以关注相关的 issue:

https://github.com/pingcap/tispark/issues/1173