我有一个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。
如果源值为空,有没有办法返回空。
答案 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|
+----------+-------------------+