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

从Azure Synapse Notebook写入Kusto时表已存在触发类型转换异常

Azure Synapse PySpark写入Kusto时表已存在抛出ClassCastException的解决方法

问题场景

在Azure Synapse Notebook中使用PySpark向Kusto写入数据,当目标表已存在时,执行以下代码会抛出类型转换异常:

原代码

df.write \
    .format("com.microsoft.kusto.spark.synapse.datasource") \
    .option("spark.synapse.linkedService", "<link service name>") \
    .option("kustoDatabase", "<Database name>") \
    .option("kustoTable", "<Table name>") \
    .option("tableCreateOptions","CreateIfNotExist") \
    .mode("Append") \
    .save()

抛出的异常

java.lang.ClassCastException: java.lang.String cannot be cast to org.json.JSONObject
    at com.microsoft.kusto.spark.datasink.KustoWriter$.$anonfun$write$3(KustoWriter.scala:69)
    at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:286)
    at scala.collection.Iterator.foreach(Iterator.scala:943)
    at scala.collection.Iterator.foreach$(Iterator.scala:943)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
    at scala.collection.IterableLike.foreach(IterableLike.scala:74)
    at scala.collection.IterableLike.foreach$(IterableLike.scala:73)

环境信息

当前Synapse池版本:Spark 3.3、Python 3.10、Scala 2.12.17、Java 11

问题原因

tableCreateOptions参数要求传入JSON格式字符串,原代码中直接传入"CreateIfNotExist"字符串,导致Kusto Spark连接器无法将其解析为预期的JSONObject,触发类型转换异常。

解决方案

方案1:修正tableCreateOptions参数格式

将参数值改为JSON格式的字符串,明确指定CreateIfNotExist为true:

df.write \
    .format("com.microsoft.kusto.spark.synapse.datasource") \
    .option("spark.synapse.linkedService", "<link service name>") \
    .option("kustoDatabase", "<Database name>") \
    .option("kustoTable", "<Table name>") \
    .option("tableCreateOptions", '{"CreateIfNotExist": true}') \
    .mode("Append") \
    .save()

方案2:移除不必要的表创建参数

如果已经确认目标表存在,无需自动创建表逻辑,可直接删除tableCreateOptions参数,仅保留追加模式:

df.write \
    .format("com.microsoft.kusto.spark.synapse.datasource") \
    .option("spark.synapse.linkedService", "<link service name>") \
    .option("kustoDatabase", "<Database name>") \
    .option("kustoTable", "<Table name>") \
    .mode("Append") \
    .save()

内容的提问来源于stack exchange,提问作者DxG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:52:40