在Spark Scala中将数据框内的数据字段从任何格式转换为固定格式

时间:2019-02-14 11:50:49

标签: apache-spark apache-spark-sql

我的Spark DataDrame中有一个日期列,其中包含多种字符串日期格式(可以是MM-dd-yyyydd-MM-yyyyMM.dd.yyyy)。我想将所有这些都转换为MM/dd/yyyy。我尝试使用regex来区分格式和使用udfs,我发现它们的容错性不高。我相信有些SQL函数可以直接使用而无需花费很多和低效的重新格式化,但我不知道它们,我尝试了它们,但找不到任何解决方案。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

UDF如果使用迭代器,则无法正常工作。如果月份和日期小于12并且您实际上无法执行任何操作,则无法从数据中识别MM-dd-yyyy或dd-MM-yyyy。实现此目的的最佳方法是从源传递日期格式。任何源系统都将具有同步日期格式。如果您可以在单独的列中获取每个日期的格式,那么此问题将得到解决。 如果不可能,请使用行迭代器,并将此特定列转换为Spark的静态yyyy-MM-dd隐式日期格式。然后实现您的结构