当前位置: 首页 > news >正文

阿里云 dataworks maxcompute创建python脚本实现列转行 脚本demo示例。

问题 需要将如下数据结构实现,列转行。tag_group_name列转化为行。对应的列值就是 tag_name。(列转行不理解的同学好好思考一下)

在这里插入图片描述

效果 已实现列转行

在这里插入图片描述

如下代码可以直接使用、本人已测试

'''PyODPS 3
请确保不要使用从 MaxCompute下载数据来处理。下载数据操作常包括Table/Instance的open_reader以及 DataFrame的to_pandas方法。 
推荐使用 PyODPS DataFrame(从 MaxCompute 表创建)和MaxCompute SQL来处理数据。
更详细的内容可以参考:https://help.aliyun.com/document_detail/90481.html
'''
from odps import ODPS
from odps.df import DataFrame
import pandas as pd
from odps import options# 临时表
sql_str='''drop table if exists temp_lgr_label1; create table if not exists temp_lgr_label1 as select * from temp_lgr_label3WHERE top_parent_asin is not null'''odps.execute_sql(sql_str,hints={ "odps.sql.submit.mode" : "script"})# 取数
ref_df= DataFrame(o.get_table(name='temp_lgr_label1'))# 透视 
# columns 需要列转行的列名
# values  列明对应的值标签值
ref_df2=ref_df.pivot(rows=[
'tenant_id','profile_id',"marketplace_id","seller_id","campaign_id","ad_group_id",'top_parent_asin','search_term',"keyword"], columns='tag_group_name', values='tag_name')# 持久化(将数据存储到另一个表中、无需自己建设表啊)
ref_df2.persist('temp_lgr_label2')

特殊情况(如下问题都是本人实际工作中遇到,希望可以帮助到你)

问题1 如下原底表中存在行值是相同的情况,是无法实现行转列的。程序会报错,并且提示是哪条数据存在这样的问题。

在这里插入图片描述

解决方案

在底表中新增一个随机数字段,可以实现行专列

-- 解决列重复问题
concat(from_unixtime(unix_timestamp()),'_',cast(floor(rand() * 1000000) as string)) keyword
问题2 如果存在列名中包含特殊字符如下

‘+’, ‘-’, ‘.’, ‘*’, ‘?’, ‘(’, ‘)’, ‘[’, ‘]’, ‘~’, ‘|’, ‘$’,‘【’,‘】’

解决方案 通过如下逻辑可以进行解决
 REGEXP_REPLACE(tag_group_name, '[\\+\\-\\.\\*\\?\\(\\)\\[\\]\\{\\}\\~\\|\\\\\\/\\$\\x{3010}\\x{3011}]', '')
http://www.xdnf.cn/news/46117.html

相关文章:

  • 06 GE Modifier
  • AUTOSAR图解==>AUTOSAR_RS_BSWModuleDescriptionTemplate
  • 19. git reflog
  • 力扣每日打卡16 781. 森林中的兔子(中等)
  • C++项目 —— 基于多设计模式下的同步异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)
  • 家庭电脑隐身后台自动截屏软件,可远程查看
  • Spring Data MongoDB 精华:给新手的核心注解指南
  • 从内核到用户态:Linux信号内核结构、保存与处理全链路剖析
  • 图论基础:图存+记忆化搜索
  • 基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(三)
  • 嵌入式---零点漂移(Zero Drift)
  • go+mysql+cocos实现游戏搭建
  • jetpack之LiveData的原理解析
  • 【25软考网工】第二章(8)差错控制、奇偶校验、CRC、海明码
  • Doris + Iceberg 构建冷热分层数据湖架构:架构设计与实战指南
  • Linux驱动开发--异步通知与异步I/O
  • 深度学习方向急出成果,是先广泛调研还是边做实验边优化?
  • ES6 第一讲 变量定义 堆与栈 字符串的扩展和数值型的扩展
  • c++STL——list的使用和模拟实现
  • 【题解-Acwing】790. 数的三次方根
  • 传导发射测试(CE)和传导骚扰抗扰度测试(CS)
  • 【概率论,算法】排列的峰值期望
  • seata db模式,nacos注册中心,spring boot ,spring cloud ,jdk1.8 完成的配置步骤
  • 【上位机——MFC】MFC入门
  • 状态管理最佳实践:Bloc架构实践
  • Android Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?
  • 【深度学习—李宏毅教程笔记】各式各样的 Attention
  • [原创](现代C++ Builder 12指南): [4]如何使用VCL的TStringBuilder?
  • IP数据报
  • kotlin,编码、解码