有没有办法在spark中强制转换列,并在类型不匹配的情况下使其失败,而不是返回null?
作为一个例子,我有一个包含所有字符串列的df,但其中一个我想转换为最新的
+----------+------------+------------+
| service| eventType|process_date|
+----------+------------+------------+
| myservice| myeventtype| 2020-10-15|
| myservice| myeventtype| 2020-02-15|
|myservice2|myeventtype3| notADate |
+----------+------------+------------+
如果我试着把这个和主 cast
功能 df.withColumn("process_date", df("process_date").cast(targetType))
它将用一个 null
```
+----------+------------+------------+
| service| eventType|process_date|
+----------+------------+------------+
| myservice| myeventtype| 2020-10-15|
| myservice| myeventtype| 2020-02-15|
|myservice2|myeventtype3| null|
+----------+------------+------------+
在我当前的程序中使用此函数可能会导致危险的数据丢失,我可能无法捕获这些数据,直到太迟了。
1条答案
按热度按时间fnx2tebb1#
我找到两种方法来做你想做的事。
首先,如果您确实希望在无法解析日期时进程失败,可以使用udf:
此操作将失败,但出现以下异常:
或者,您可以执行转换并检查转换后的值是否为null,但原始值是否不适用于任何行: