Spark SQL创建isdate日期验证函数

x33g5p2x  于2020-12-11 发布在 Spark  
字(1.6k)|赞(0)|评价(0)|浏览(815)

许多数据库如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 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。

在Spark上下文中注册isdate函数

下一步是将上一步创建的python函数注册到spark上下文中,使其在运行时对spark SQL可见。

你可以使用sqlContext.udf.register方法与spark SQL上下文进行注册。

sqlContext.udf.register('udf_isdate', isdate)

为了解释上面的语法,我们将'isdate'函数注册为spark上下文中的'udf_isdate'。udf_isdate应该在后续的spark SQL语句中使用。

在你的Spark SQL查询中使用isdate函数

最后,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|
+----------------------------------------+

相关文章

最新文章

更多