Python Spark jdbc.write到mysql时出现空错误

Python Spark jdbc.write到mysql时出现空错误,python,apache-spark,jdbc,null,Python,Apache Spark,Jdbc,Null,我正在数据帧中创建一个列,该列被设置为null(通过None),但当发送到JDBC write时,我得到“无法获取null的JDBC类型”。任何帮助都将不胜感激 update_func = (when(col("SN") != col("SNORIGINAL"), None)) aPACKAGEDF = aPACKAGEDF.withColumn('SNORIGINAL_TEMPCOL', update_func) java.lang.IllegalArgumentException:无法

我正在数据帧中创建一个列,该列被设置为null(通过None),但当发送到JDBC write时,我得到“无法获取null的JDBC类型”。任何帮助都将不胜感激

update_func = (when(col("SN") != col("SNORIGINAL"), None)) 

aPACKAGEDF = aPACKAGEDF.withColumn('SNORIGINAL_TEMPCOL', update_func)
java.lang.IllegalArgumentException:无法获取null的JDBC类型 位于org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$getJdbcType$2.apply(JdbcUtils.scala:175) 位于org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$getJdbcType$2.apply(JdbcUtils.scala:175) 位于scala.Option.getOrElse(Option.scala:121) 位于org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$getJdbcType(JdbcUtils.scala:174) 位于org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$20.apply(JdbcUtils.scala:635) 位于org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$20.apply(JdbcUtils.scala:635) 在scala.collection.TraversableLike$$anonfun$map$1.apply处(TraversableLike.scala:234) 在scala.collection.TraversableLike$$anonfun$map$1.apply处(TraversableLike.scala:234) 在scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) 位于scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186) 位于scala.collection.TraversableLike$class.map(TraversableLike.scala:234) 位于scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186) 位于org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.savePartition(JdbcUtils.scala:635) 位于org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:821) 位于org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:821) 位于org.apache.spark.rdd.rdd$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(rdd.scala:929) 位于org.apache.spark.rdd.rdd$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(rdd.scala:929) 位于org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2067) 位于org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2067) 位于org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) 位于org.apache.spark.scheduler.Task.run(Task.scala:109) 位于org.apache.spark.executor.executor$TaskRunner.run(executor.scala:345) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 运行(Thread.java:748)


这是因为
None
in

update_func = (when(col("SN") != col("SNORIGINAL"), None)) 
没有定义类型。改用castedliteral。例如,如果类型应为字符串(
VARCHAR
或类似类型):


有时你看不见森林,看不见树木。你的建议很管用!
from pyspark.sql.functions import lit

update_func = when(col("SN") != col("SNORIGINAL"), lit(None).cast("string"))