You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PySpark在SingleStore(原MemSQL)中执行DELETE查询

在PySpark中执行SingleStore的DELETE语句

方法1:通过JDBC连接直接执行原生DELETE语句

Spark的memsql数据源API主要聚焦于DataFrame的读写操作,执行DELETE这类DML语句需要直接调用原生JDBC连接。你可以借助Spark的Java底层API获取SingleStore连接,然后执行删除逻辑:

from pyspark.sql import SparkSession

# 初始化SparkSession(沿用你已有的配置即可)
spark = SparkSession.builder.appName("SingleStoreDelete").getOrCreate()

# 替换为你的SingleStore实际连接参数
db_host = "your-singlestore-host"
db_port = "3306"
db_name = "your-database"
db_user = "your-username"
db_password = "your-password"

# 构建删除语句
delete_sql = "DELETE FROM tableA WHERE id=1;"

# 获取JDBC连接并执行语句
conn = spark.sparkContext._jvm.java.sql.DriverManager.getConnection(
    f"jdbc:singlestore://{db_host}:{db_port}/{db_name}",
    db_user,
    db_password
)
conn.createStatement().execute(delete_sql)
conn.close()

注意:确保Spark环境中已引入SingleStore JDBC驱动(com.singlestore.jdbc.Driver),可在提交Spark任务时通过--jars参数添加驱动包。

方法2:DataFrame过滤后重写表(仅适用于特定场景)

如果你的表数据量较小,且允许全表替换,可以先读取数据、过滤掉待删除记录,再以overwrite模式写回原表。这种方式不适合单条/少量记录删除,效率较低:

# 读取原表数据
df = spark.read.format("memsql").option("dbtable", "tableA").load()

# 过滤掉id=1的记录
filtered_df = df.filter(df.id != 1)

# 重写原表(会覆盖所有现有数据)
filtered_df.write.format("memsql")\
    .option("dbtable", "tableA")\
    .mode("overwrite")\
    .save()

总结

优先选用方法1,直接通过JDBC执行原生DELETE语句,这是处理SingleStore记录删除最直接高效的方式,能避免不必要的数据读写开销。

内容的提问来源于stack exchange,提问作者Naveen S Pai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:43:05