Python Spark jdbc.write到mysql时出现空错误
我正在数据帧中创建一个列,该列被设置为null(通过None),但当发送到JDBC write时,我得到“无法获取null的JDBC类型”。任何帮助都将不胜感激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:无法
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"))