Spark数据帧将字符串转换为时间戳 - 为空值

时间:2017-09-21 06:50:24

标签: scala apache-spark apache-spark-sql

我有一个spark应用程序,需要从下面的字符串转换为时间戳是我的代码。

val df = sc.parallelize(Seq("09/18/2017","")).toDF("sDate")
+----------+
|     sDate|
+----------+
|09/18/2017|
|          |
+----------+
val ts = unix_timestamp($"sDate","MM/dd/yyyy").cast("timestamp")
df.withColumn("ts", ts).show()
+----------+--------------------+
|     sDate|                  ts|
+----------+--------------------+
|09/18/2017|2017-09-18 00:00:...|
|          |                null|
+----------+--------------------+

转换效果很好,但如果值为空,则在转换后我将变为null。

如果源值为空,有没有办法返回空。

1 个答案:

答案 0 :(得分:2)

您可以使用when功能,如下所示

import org.apache.spark.sql.functions._
val ts = unix_timestamp($"sDate","MM/dd/yyyy").cast("timestamp")
df.withColumn("ts", when(ts.isNotNull, ts).otherwise(lit("empty"))).show()

将输出为

+----------+-------------------+
|     sDate|                 ts|
+----------+-------------------+
|09/18/2017|2017-09-18 00:00:00|
|          |              empty|
+----------+-------------------+