栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive将带有斜杆的时间拼接成字符串

Hive将带有斜杆的时间拼接成字符串

遇到的问题

近日分析师提供一批样本数据,需要根据id和时间进行匹配,样本数据格式如下:

但是时间数仓中的数据时间却是年月日时分秒拼接而成的字符串,导致两者匹配失败,所以需要转换,数仓的数据:

解决问题分析过程:
  1. 不能使用hive 自带的date_format方法。 因为表中的月日时分秒前面没有补0,使用date_format会造成数据失真,例如下图时分秒的值是错误的:
    (因为是时分秒不全,所以转换之前先拼接 :00 )

  2. 自定义一个spark的udf去实现,我用的python

from pyspark.sql.functions import udf
from pyspark.sql.types import StructType, StructField, StringType

# 实现过程 ,根据空格,冒号,斜杠分割,不够两位数的前面补0,然后再拼接起来,最后拼接00就可以
def get_new_applydatetime(x):
    return '{}00'.format(''.join([str(z).zfill(2)  for i in x.split('/') for j in i.split(' ')  for z in j.split(':')  ]))

# 注册成spark的udf
get_new_applydatetime_udf = udf(get_new_applydatetime,StringType())

# 使用spark的dataframe调用udf 
df_sample = df_sample.withColumn("user_applydatetime_raw",get_new_applydatetime_udf("user_applydatetime"))

最终实现的结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283178.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号