Mysql concat_ws在所有值都为null时运行空值,在所有值都为null时我需要null

Mysql concat_ws在所有值都为null时运行空值,在所有值都为null时我需要null,mysql,apache-spark,pyspark,Mysql,Apache Spark,Pyspark,我正在用pyspark编写一个脚本,我们在这里进行数据转换。 我正在使用contact_ws函数来联系值,同时执行groupby。我在这里面临的问题是,如果concat_ws中的所有值都null,那么它将返回空白值。所以,当我试图在mysql表中插入新的转换数据时,它会给我类似“”的错误 无法在数据库中插入 若要解决此问题,我们需要在concat_ws函数中的所有值均为null时使用null值,假设您有以下数据帧 df.show() +----+----+----+ |val1|val2|va

我正在用pyspark编写一个脚本,我们在这里进行数据转换。 我正在使用
contact_ws
函数来联系值,同时执行
groupby
。我在这里面临的问题是,如果
concat_ws
中的所有值都
null
,那么它将返回空白值。所以,当我试图在mysql表中插入新的转换数据时,它会给我类似“”的错误

无法在数据库中插入


若要解决此问题,我们需要在
concat_ws
函数中的所有值均为
null

时使用
null
值,假设您有以下数据帧

df.show()

+----+----+----+
|val1|val2|val3|
+----+----+----+
|   a|   b|   c|
|   d|   e|null|
|   g|null|null|
|null|null|null|
+----+----+----+
您希望将
val1
val2
val3
连接到一个新列
concat

正如您所说,
concat_ws
的默认行为是,如果所有输入都是
null
,则返回一个空字符串:

df.withColumn(“concat”,concat_-ws(“_”),val1,val2,val3)).show()
您有许多选项可以获取
null
值,而不是空字符串:

选项1:调用
concat_ws
,然后将所有空值替换为null
import org.apache.spark.sql.types_
var withConcat=df.withColumn(“concat”,concat_ws(“_”),val1,val2,val3)).show()
withConcat.withColumn(“concat”,当('concat.equalTo(“”),亮起(null.cast(StringType))。否则('concat)).show()
选项2:如果所有值均为
null
df.withColumn(“concat”,当(coalesce('val1,'val2,'val3)).isNull,lit(null).cast(StringType))。否则(concat_-ws('u1,'val1,'val2,'val3))。show()
注意:代码是scala的,但是可以很容易地适应pyspark


假设您有以下数据帧

df.show()

+----+----+----+
|val1|val2|val3|
+----+----+----+
|   a|   b|   c|
|   d|   e|null|
|   g|null|null|
|null|null|null|
+----+----+----+
您希望将
val1
val2
val3
连接到一个新列
concat

正如您所说,
concat_ws
的默认行为是,如果所有输入都是
null
,则返回一个空字符串:

df.withColumn(“concat”,concat_-ws(“_”),val1,val2,val3)).show()
您有许多选项可以获取
null
值,而不是空字符串:

选项1:调用
concat_ws
,然后将所有空值替换为null
import org.apache.spark.sql.types_
var withConcat=df.withColumn(“concat”,concat_ws(“_”),val1,val2,val3)).show()
withConcat.withColumn(“concat”,当('concat.equalTo(“”),亮起(null.cast(StringType))。否则('concat)).show()
选项2:如果所有值均为
null
df.withColumn(“concat”,当(coalesce('val1,'val2,'val3)).isNull,lit(null).cast(StringType))。否则(concat_-ws('u1,'val1,'val2,'val3))。show()
注意:代码是scala的,但是可以很容易地适应pyspark

+----+----+----+------+
|val1|val2|val3|concat|
+----+----+----+------+
|   a|   b|   c| a_b_c|
|   d|   e|null|   d_e|
|   g|null|null|     g|
|null|null|null|  null|
+----+----+----+------+
+----+----+----+------+
|val1|val2|val3|concat|
+----+----+----+------+
|   a|   b|   c| a_b_c|
|   d|   e|null|   d_e|
|   g|null|null|     g|
|null|null|null|  null|
+----+----+----+------+