Spark JDBC
JDBC 是 Spark 中最常用的数据源之一。 在本节中,我们将介绍如何使用 ClickHouse 官方 JDBC 连接器 与 Spark 集成。
读取数据
- Java
- Scala
- Python
使用 JAR 文件初始化 Spark 会话
spark = SparkSession.builder
.appName("example")
.master("local")
.config("spark.jars", ",".join(jar_files))
.getOrCreate()
url = "jdbc:ch://localhost:8123/default"
user = "your_user"
password = "your_password"
query = "select * from example_table where id > 2"
driver = "com.clickhouse.jdbc.ClickHouseDriver"
df = (spark.read .format('jdbc') .option('driver', driver) .option('url', url) .option('user', user) .option('password', password).option( 'query', query).load())
df.show()
写入数据
- Java
- Scala
- Python
使用 JAR 包初始化 Spark 会话
spark = SparkSession.builder
.appName("example")
.master("local")
.config("spark.jars", ",".join(jar_files))
.getOrCreate()
创建 DataFrame
data = [Row(id=11, name="John"), Row(id=12, name="Doe")] df = spark.createDataFrame(data)
url = "jdbc:ch://localhost:8123/default"
user = "your_user"
password = "your_password"
driver = "com.clickhouse.jdbc.ClickHouseDriver"
将 DataFrame 写入 ClickHouse
df.write
.format("jdbc")
.option("driver", driver)
.option("url", url)
.option("user", user)
.option("password", password)
.option("dbtable", "example_table")
.mode("append")
.save()
并行度
使用 Spark JDBC 时,Spark 默认只使用单个分区读取数据。要获得更高的并行度,你需要指定
partitionColumn、lowerBound、upperBound 和 numPartitions,用于定义在由多个 worker 并行读取时如何对表进行分区。
如需了解更多信息,请参阅 Apache Spark 官方文档中的
JDBC 配置。
JDBC 限制
- 截至目前,通过 JDBC 只能将数据插入到已存在的表中(目前无法像 Spark 使用其他连接器那样,在插入 DataFrame 时自动创建表)。