python创建udf函数步骤

一、目标

实现一个函数,传入两个datetime类型的参数,返回double类型的工作日天数

二、思路

如何计算差值?
如果开始时间和结束时间在同一天:实现同 datediff(@end, @start, ‘ss’) / 86400.0
如果开始时间和结束时间在不同天:将时间分为三部分

a.
开始时间 - 开始时间当天的24点
b.
结束时间当天的0点 - 结束时间
c.
开始时间当天的24点 - 结束时间当天的0点 的工作日天数

在这里插入图片描述

三、实现

1、下载三方包

2、编译生成WHEEL包


将第三方包解压到本地,在系统的命令行窗口,切换路径至setup.py文件所在文件夹
在系统的命令行窗口,执行如下命令编译生成WHEEL包

huahuo@HUAHUOdeMacBook-Pro ~ % cd Downloads 
huahuo@HUAHUOdeMacBook-Pro Downloads % cd chinesecalendar-1.8.1
huahuo@HUAHUOdeMacBook-Pro chinesecalendar-1.8.1 % python setup.py bdist_wheel 

修改后缀为ZIP格式
在这里插入图片描述
重命名为

3、上传资源

hdfs dfs -put /path/to/chinese_holiday.zip /hdfs/path/to/work/chinese_holiday.zip

4、新建Python资源

chinese_holiday.py

● 计算 end 和 start 之间的总天数,如果发生异常(比如传入的不是有效的 datetime 对象),它将返回 None。
● 然后,从 start 日期的第二天开始迭代,一直到 end 日期的前一天。对于每一天,如果 is_holiday(start_date) 返回 True(表示这一天是节假日),则将 total_days 减一。is_holiday 函数来自于 chinese_calendar 模块,用于判断指定的日期是否为中国的节假日。
● 在迭代期间,如果发生异常(比如无法从 chinese_calendar 模块导入 is_holiday 函数或其他原因),它将返回当前计算的 total_days。
● 如果没有异常,最终返回的 total_days 将是 end 和 start 日期之间的工作日数(即剔除了节假日的天数)。
总结来说,这个自定义函数的目的是计算两个日期之间的中国工作日天数,忽略周末和公共假期。


class is_chinese_holiday(object):def __init__(self):import syssys.path.insert(0, 'work/chinese_holiday.zip')def evaluate(self, thedate):from chinese_calendar import get_holiday_detail, is_in_lieufrom datetime import datetimefrom json import dumpsinfo = {'is_holiday': 'Invalid'}try:target = datetime.strptime(thedate, '%Y%m%d').date()detail = get_holiday_detail(target)info['is_holiday'] = str(detail[0])info['is_in_lieu'] = str(is_in_lieu(target))if (detail[0]):info['holiday_name'] = str(detail[1])return dumps(info)else:return dumps(info)except:return dumps(info)class get_chinese_workdays(object):def __init__(self):import syssys.path.insert(0, 'work/chinese_holiday.zip')def evaluate(self, end, start):from chinese_calendar import is_holidayfrom datetime import datetime, timedeltatry:total_days = (end - start).total_seconds() / 86400.0except:return Nonetry:start_date = start.date() + timedelta(days=1)while start_date < end.date():total_days -= int(is_holiday(start_date))start_date += timedelta(days=1)return total_daysexcept:return total_days

5、新建Maxc函数

将你的 Python UDF 脚本上传到 Hive 服务器上,或者放置在一个 Hive 能够访问到的位置,确保 Hive 服务器上已经安装了 Python,并且你的脚本具有执行权限。
你需要在 Hive 会话中注册这个 Python 脚本作为一个 UDF。这可以通过 ADD FILE 命令来完成,然后使用 TRANSFORM 关键字调用这个脚本:
– 将 Python 脚本添加到 Hive
ADD FILE /path/to/chinese_holiday.py;

– 创建一个临时的自定义函数
CREATE TEMPORARY FUNCTION get_chinese_workdays AS ‘chinese_holiday.get_chinese_workdays’;

– 使用 UDF 转换数据
SELECT get_chinese_workdays (column_name)
FROM your_table;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3. ⼤语⾔模型深度学习背景知识

1. LLM⼤语⾔模型⼀般训练过程 #mermaid-svg-8kci1fjEPiVolPue {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8kci1fjEPiVolPue .error-icon{fill:#552222;}#mermaid-svg-8kci1fjEPiVolPue .error-text{fill:#5522…

QML用ListView实现带section的GridView

QML自带的GridView只能定义delegate&#xff0c;没有section&#xff0c;类似手机相册带时间分组标签的样式就没法做。最简单的方式就是组合ListViewGridView&#xff0c;或者ListViewFlow&#xff0c;但是嵌套View时&#xff0c;子级View一般是完全展开的&#xff0c;只显示该…

Mybatis中的sql-xml延迟加载机制

Mybatis中的sql-xml延迟加载机制 hi&#xff0c;我是阿昌&#xff0c;今天记录一下关于Mybatis中的sql-xml延迟加载机制 一、前言 首先mybatis技术本身就不多介绍&#xff0c;说延迟加载机制之前&#xff0c;那要先知道2个概念&#xff1a; 主查询对象关联对象 假设咱们现…

OpenCV 笔记(20):霍夫圆检测

1. 霍夫圆变换 霍夫圆变换(Hough Circle Transform)是一种数字图像处理中的特征提取技术&#xff0c;用于在图像中检测圆形。它将二维图像空间中一个圆转换为该圆半径、圆心横纵坐标所确定的三维参数空间中一个点的过程。因此&#xff0c;圆周上任意三点所确定的圆&#xff0c…

ElasticSearch查询语句用法

查询用法包括&#xff1a;match、match_phrase、multi_match、query_string、term 1.match 1.1 不同字段权重 如果需要为不同字段设置不同权重&#xff0c;可以考虑使用bool查询的should子句来组合多个match查询&#xff0c;并为每个match查询设置不同的权重 {"query&…

二叉树的详解

二叉树 【本节目标】 掌握树的基本概念掌握二叉树概念及特性掌握二叉树的基本操作完成二叉树相关的面试题练习 树型结构&#xff08;了解&#xff09; 概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。…

JS-本地文件上传

由于不需要原上传文件的样式&#xff0c;所以自己书写了一个按钮触发文件上传&#xff0c;并将原本的样式隐藏 <!doctype html> <html><head><meta charset"utf-8"><title>文件传输</title> </head><body><inpu…

工业笔记本丨行业三防笔记本丨亿道加固笔记本定制丨极端温度优势

工业笔记本是专为在恶劣环境条件下工作而设计的高度耐用的计算机设备。与传统消费者级笔记本电脑相比&#xff0c;工业笔记本在极端温度下展现出了许多优势。本文将探讨工业笔记本在极端温度环境中的表现&#xff0c;并介绍其优势。 耐高温性能: 工业笔记本具有更高的耐高温性…

安卓动态链接库文件体积优化探索实践

背景介绍 应用安装包的体积影响着用户下载量、安装时长、用户磁盘占用量等多个方面&#xff0c;据Google Play统计&#xff0c;应用体积每增加6MB&#xff0c;安装的转化率将下降1%。 安装包的体积受诸多方面影响&#xff0c;针对dex、资源文件、so文件都有不同的优化策略&…

【极数系列】Flink集成KafkaSource 实时消费数据(10)

文章目录 01 引言02 连接器依赖2.1 kafka连接器依赖2.2 base基础依赖 03 连接器使用方法04 消息订阅4.1 主题订阅4.2 正则表达式订阅4.3 Partition 列分区订阅 05 消息解析06 起始消费位点07 有界 / 无界模式7.1 流式7.2 批式 08 其他属性8.1 KafkaSource 配置项&#xff08;1&…

如何训练自己的模型

无论数据类型或目标如何&#xff0c;用于训练和使用 AutoML 模型的工作流都是相同的&#xff1a; 准备训练数据。 我们需要将需要训练的数据准备为jsonl格式&#xff0c;这种格式的特点就是每一行都是json的格式 {"prompt": "<prompt text>", "…

【初识爬虫+requests模块】

爬虫又称网络蜘蛛、网络机器人。本质就是程序模拟人使用浏览器访问网站&#xff0c;并将需要的数据抓取下来。爬虫不仅能够使用在搜索引擎领域&#xff0c;在数据分析、商业领域都得到了大规模的应用。 URL 每一个URL指向一个资源&#xff0c;可以是一个html页面&#xff0c;一…

配置git环境与项目创建

项目设计 名称&#xff1a;KOB 项目包含的模块 PK模块&#xff1a;匹配界面&#xff08;微服务&#xff09;、实况直播界面&#xff08;WebSocket协议&#xff09; 对局列表模块&#xff1a;对局列表界面、对局录像界面 排行榜模块&#xff1a;Bot排行榜界面 用户中心模块&…

从Kafka系统中读取消息数据——消费

从Kafka系统中读取消息数据——消费 消费 Kafka 集群中的主题消息检查消费者是不是单线程主题如何自动获取分区和手动分配分区subscribe实现订阅&#xff08;自动获取分区&#xff09;assign&#xff08;手动分配分区&#xff09; 反序列化主题消息反序列化一个类.演示 Kafka 自…

软件测试学习笔记-使用jmeter进行性能测试

性能测试&#xff1a;使用自动化工具&#xff0c;模拟不同的场景&#xff0c;对软件各项性能指标进行测试和评估的过程。 性能测试的目的&#xff1a; 评估当前系统的能力寻找性能瓶颈&#xff0c;优化性能评估软件是否能够满足未来的需要 性能测试和功能测试对比 焦点不同&…

基于FPGA的图像最近邻插值算法verilog实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA数据导入matlab显示图片&#xff0c;效果如下&#xff1a; 2.算法运行软件版本 vivado2019.2&#xff0c;matlab2022a 3.部分核心程序 ti…

【开源】SpringBoot框架开发高校学生管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学生选课模块2.4 成绩管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学院课程表3.2.3 学生选课表3.2.4 学生成绩表 四、系统展示五、核心代码5.1 查询课程5.2 新…

服务器和CDN推荐

简介 陆云Roovps是一家成立于2021年的主机服务商&#xff0c;主要业务是销售美国服务器、香港服务器及国外湖北十堰高防服务器&#xff0c;还有相关CDN产品。&#xff08; 地址&#xff1a;roovps&#xff09; 一、相关产品

C语言之数据在内存中的存储

目录 1. 整数在内存中的存储2. 大小端字节序和字节序判断什么是大小端&#xff1f;为什么有大小端&#xff1f;练习1练习2练习3练习4练习5练习6 3. 浮点数在内存中的存储浮点数存的过程浮点数取得过程练习题解析 1. 整数在内存中的存储 在讲解操作符的时候&#xff0c;我们已经…

ffmpeg的使用,安装,抽帧,加水印,截图,生成gif,格式转换,抓屏等

实际使用中总结的关于ffmpeg对视频的处理的记录文档 具体信息&#xff1a; http://ffmpeg.org/download.html 官网下载ffmpeg 关于ffmpeg的安装详细步骤和说明 装ffmpeg 方式,Linux和windows下的 http://bbs.csdn.net/topics/390519382 php 调用ffmpeg , http://bbs.csdn.net/t…