【Maxcompute】数据封装json、根据经纬度计算距离、根据证件号提取年龄段信息、判断是否在外包多边形内udf、udtf函数

本文主要是介绍【Maxcompute】数据封装json、根据经纬度计算距离、根据证件号提取年龄段信息、判断是否在外包多边形内udf、udtf函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.梳理、总结经纬度处理在Maxcompute平台上的实战应用,如模型结果等封装json格式、根据经纬度计算距离udf、根据证件号提取年龄段信息、判断是否在外包多边形内udf、udtf、函数注册与使用。
2.欢迎批评指正,跪谢一键三连!

文章目录

    • 1.参考代码
      • 1.1 模型结果等封装`json`格式`udf`函数
      • 1.2 根据经纬度计算距离`udf`函数
      • 1.3 根据证件号提取年龄段信息`udtf`函数
      • 1.4 判断是否在外包多边形内`udf`函数

1.参考代码

1.1 模型结果等封装json格式udf函数

  • format_all_cols_json_youli,可变参数
    #coding:utf-8import json
    # import sys
    from odps.udf import annotate@annotate("*->string")
    class format_all_cols_json_youli(object):def evaluate(self, *eles):p_dic,keys,dic_keys,result = {},[],[],''if eles is not None and len(eles)>1:keys = eles[-2].split(',')dic_keys = eles[-1].split(',')inx = 0for ky in keys:if ky in dic_keys:# if eles[inx] is not None:# try:p_dic[ky] = eval(eles[inx]) if eles[inx] is not None else []# except Exception as e:#     print(eles[inx],p_dic[ky], eles)#     raise# else:#     p_dic[ky] = else:p_dic[ky] = eles[inx]inx+=1# result = json.dumps(p_dic, sort_keys=True, indent=True)# result = json.dumps(p_dic)result = json.dumps(p_dic, sort_keys=True, indent=True, ensure_ascii=False)return result
    

1.2 根据经纬度计算距离udf函数

  • lnglat_distance_youli
    #coding:utf-8
    #lnglat_distance_youli.pyfrom odps.udf import annotate
    from math import sin,cos,radians,fabs,sqrt,asin'''
    function: 根据经纬度计算距离,单位m
    input:  lng1,lat1,lng2,lat2
    parms:  lng1:点1经度 doublelat1:点1纬度 doublelng2:点2经度 doublelat2:点2纬度 double
    output:distance: 距离,单位m
    '''
    @annotate("double,double,double,double->double")
    class lnglat_distance_youli(object):def evaluate(self,lng1,lat1,lng2,lat2):ER=6378245hav=lambda x:sin(x/2)*sin(x/2)lng11=radians(float(lng1))lat11=radians(float(lat1))lng22=radians(float(lng2))lat22=radians(float(lat2))dlng=fabs(lng11-lng22)dlat=fabs(lat11-lat22)h=hav(dlat)+cos(lat11)*cos(lat22)*hav(dlng)distance=2 * ER * asin(sqrt(h))return distance
    

1.3 根据证件号提取年龄段信息udtf函数

  • age_info_extract_youli

    #coding:utf-8
    #info_extract.pyfrom odps.udf import annotate
    from odps.udf import BaseUDTF
    from odps.distcache import get_cache_table
    @annotate('string->string,string,string')
    class age_info_extract_youli(BaseUDTF):def __init__ (self):self.data = []self.age_num = [0,0,0,0,0] #ageRange : [0,18,35,60]self.age_range = ['18岁以下','19~35岁','36~60岁','60岁以上','数据缺失']def process(self, arg):if arg is not None and arg <> '':age = 2024 - int(arg[6:10])if age <= 18:self.age_num[0] += 1age_tag = 0elif age <=35 and age >18:self.age_num[1] += 1age_tag = 1elif age <= 60 and age >35:self.age_num[2] += 1age_tag = 2else:self.age_num[3] += 1age_tag = 3else :self .age_num[4] += 1age_tag = 4age = '缺失'self.data.append([age,age_tag])def close(self):for i in self.data:age = str(i[0]) tag_index = i[1]ageRange = self.age_range[tag_index]agePrecent = round(float(self.age_num[tag_index])/float(len(self.data)),2)self.forward(age,ageRange,str(agePrecent))
    

1.4 判断是否在外包多边形内udf函数

  • isin_xquyu_youli
    # coding: utf-8
    # 判断是否在外包多边形内,不在,返回0;在,返回1from odps.udf import annotate
    @annotate("string,string->bigint")
    class isin_xquyu_youli(object):# 替换区域边界经纬度点位数组huzbj_lis = [[119.920013, 31.170916], ... ]def evaluate(self, lng, lat):lat2, lng2 = float(lat), float(lng)lnglist = []latlist = []for i in range(len(isin_xquyu_youli.huzbj_lis)-1):lnglist.append(isin_xquyu_youli.huzbj_lis[i][0])latlist.append(isin_xquyu_youli.huzbj_lis[i][1])maxlng,minlng = max(lnglist),min(lnglist)maxlat,minlat = max(latlist),min(latlist)if (lng2 > maxlng or lng2 < minlng or lat2 > maxlat or lat2 < minlat):return 0# return '0, 111,%s,%s,%s,%s' % (str(maxlng),str(minlng),str(maxlat),str(minlat))cnt = 0point1 = isin_xquyu_youli.huzbj_lis[0]for i in range(1, len(isin_xquyu_youli.huzbj_lis)):point2 = isin_xquyu_youli.huzbj_lis[i]# 点与多边形顶点重合if (lat2 == point1[0] and lng2 == point1[1]) or (lat2 == point2[0] and lng2 == point2[1]):return 0# return '0, 112'# 判断线段两端点是否在射线两侧 不在肯定不相交 射线(-∞,lat)(lng,lat)if (point1[1] < lng2 and point2[1] >= lng2) or (point1[1] >= lng2 and point2[1] < lng2):# 求线段与射线交点 再和lat比较point12lng = point2[0] - (point2[1] - lng2) * (point2[0] - point1[0])/(point2[1] - point1[1])# 点在多边形边上if (point12lng == lat2):return 0# return '0, 113'if (point12lng < lat2):cnt += 1point1 = point2# 从这个点做一条射线,计算它跟多边形边界的交点个数,如果交点个数为奇数,那么点在多边形内部,否则点在多边形外if cnt%2 == 0:return 0# return '0, 114'return 1
    

这篇关于【Maxcompute】数据封装json、根据经纬度计算距离、根据证件号提取年龄段信息、判断是否在外包多边形内udf、udtf函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032536

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服