2017-09-21 20 views
0

我有一个Spark应用程序,需要从字符串转换为时间戳,下面是我的代码。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| 
+----------+--------------------+ 

该转换效果不错,但如果该值为空,则在投射后变为空。

如果源值为空,是否有任何方法返回空值。

回答

1

您可以使用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| 
+----------+-------------------+ 
相关问题