许多数据库如SQL Server都支持isdate函数。Spark SQL也支持很多数据框架方法。我们已经在我的另一篇文章 "Spark SQL Date and Timestamp Functions "中看到了Spark SQL的日期函数。你可能已经注意到,在Spark SQL中并没有验证日期和时间戳值的函数。另外,你可以使用Hive日期函数来过滤掉不需要的日期。在这篇文章中,我们将通过一个例子来检查如何创建Spark SQL 用户自定义的isdate函数。
Spark最好的部分是,它支持广泛的编程语言,如Java、Scala、Python、R等。你可以使用任何一种支持的编程语言来编写UDF并在Spark上注册。
在pyspark中,Python函数的注册过程与添加jar文件和通过spark SQL注册的方法略有不同。
你可以使用下面的方法来创建和注册一个isdate UDF到Spark中。我们将使用pyspark来演示UDF的注册过程。大致如下:
1.创建isdate Python函数
2.将isdate函数注册到Spark上下文中
3.在Spark SQL查询中使用isdate函数
首先,你需要创建一个isdate python函数来验证日期函数。
以下是isdate函数。
import datetime
def isdate(date_text):
try:
datetime.datetime.strptime(date_text, '%Y-%m-%d')
return True
except ValueError:
return False
如果日期有效,该函数将返回true,否则返回false。
下一步是将上一步创建的python函数注册到spark上下文中,使其在运行时对spark SQL可见。
你可以使用sqlContext.udf.register方法与spark SQL上下文进行注册。
sqlContext.udf.register('udf_isdate', isdate)
为了解释上面的语法,我们将'isdate'函数注册为spark上下文中的'udf_isdate'。udf_isdate应该在后续的spark SQL语句中使用。
最后,Python函数是用spark上下文可见的,你可以直接用Spark SQL语句来使用。
举例来说。
sqlContext.sql('select udf_isdate(\'2020-01-001\')').show()
+-----------------------+
|udf_isdate(2020-01-001)|
+-----------------------+
| false|
+-----------------------+
Spark SQL中的日期时间验证
你可以在Pyspark中使用以下Python函数来验证日期时间。
import datetime
def isvaliddatetime(date_text):
try:
datetime.datetime.strptime(date_text, '%Y-%m-%d %H:%M:%S')
return True
except ValueError:
return False
例如:
sqlContext.sql('select udf_isvaliddatetime( \'2020-01-01 01:01:01\ ')' ).show()
+----------------------------------------+
|udf_isvaliddatetime(2020-01-01 01:01:01)|
+----------------------------------------+
| true|
+----------------------------------------+
内容来源于网络,如有侵权,请联系作者删除!