使用 Pyspark 在 Hive 中搜索 IS_DATE 等效项

Posted

技术标签:

【中文标题】使用 Pyspark 在 Hive 中搜索 IS_DATE 等效项【英文标题】:Searching for IS_DATE equivalent in Hive using Pyspark 【发布时间】:2019-08-14 10:50:34 【问题描述】:

我在源数据中有多种日期格式,我正在尝试将它们都转换为类似的格式。

我尝试了下面的代码,但它不起作用。

df.createOrReplaceTempView("df") sqlContext.sql("select decode(V2_EVENT_DATE, is_date(V2_EVENT_DATE,'mm/dd/yy'),to_date(V2_EVENT_DATE,'mm/dd/yy'), is_date(V2_EVENT_DATE,'month dd,yyyy'),to_date(V2_EVENT_DATE,'month dd,yyyy'), is_date(V2_EVENT_DATE,'dd month,yyyy'),to_date(V2_EVENT_DATE,'dd month,yyyy'), is_date(V2_EVENT_DATE,'mm/dd/yyyy'),to_date(V2_EVENT_DATE,'mm/dd/yyyy'), is_date(V2_EVENT_DATE,'dd/mm/yyyy'),to_date(V2_EVENT_DATE,'dd/mm/yyyy'), is_date(V2_EVENT_DATE,'dd month yyyy'),to_date(V2_EVENT_DATE,'dd month yyyy'), is_date(V2_EVENT_DATE,'yyyy'),to_date(V2_EVENT_DATE||'/12/31','yyyy/mm/dd'), is_date(V2_EVENT_DATE,'dd month yyyy'),to_date(V2_EVENT_DATE,'dd month yyyy'), is_date(V2_EVENT_DATE,'month dd yyyy'),to_date(V2_EVENT_DATE,'month dd yyyy'), is_date(V2_EVENT_DATE,'dd-Mon-yy'),to_date(V2_EVENT_DATE,'dd-Mon-yy'), is_date(V2_EVENT_DATE,'ddmmyy'),to_date(V2_EVENT_DATE,'ddmmyy'), is_date(V2_EVENT_DATE,'mmddyy'),to_date(V2_EVENT_DATE,'mmddyy'), null) EVENT_DATE_CLEANED from df")

错误:

AnalysisException: u"Undefined function: 'is_date'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 29"

基本上,我在 Hive 或 Pyspark 中搜索与 SQL IS_DATE 等效的函数。我无法在数据框中开发它,因为我再次在此日期检查或 IS_DATE 部分中受到打击,这就是尝试 Hive 临时视图的原因。我是 Pyspark 的新手。请帮忙。

【问题讨论】:

【参考方案1】:
case when unix_timestamp(date_col,'MM/dd/yy') is not null then to_date(from_unixtime(unix_timestamp(date_col,'MM/dd/yy')))
     when unix_timestamp(date_col,'MMM dd,yyyy') is not null then to_date(from_unixtime(unix_timestamp(date_col,'MMM dd,yyyy')))
     when ... and so on
 end as event_date_cleaned

日期格式应该是固定的。在此处查看日期/时间模式参考:SimpleDateFormat

您可以像这样在 hive 中轻松测试格式字符串:

select to_date(from_unixtime(unix_timestamp('Aug 14,2019','MMM dd,yyyy')));

返回:

2019-08-14
Time taken: 0.056 seconds, Fetched: 1 row(s)

【讨论】:

以上是关于使用 Pyspark 在 Hive 中搜索 IS_DATE 等效项的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 无法在 hive 中创建镶木地板表

如何使用 Hive 仓库连接器在 pyspark 中执行 HQL 文件

PySpark 和 HIVE/Impala

如何使用 Pyspark 在 Databricks 中合并 Hive 表中的记录?

无法使用 Pyspark 访问外部 Hive 元存储

如何使用 Hive 上下文中的 Pyspark 调用用 Java 编写的 Hive UDF