sparksql的transform如何使用

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

sparksql和hive都提供了transform方法,而且由于sparksql的抽象语法树复用了hive的原因,因此两者在用意上是一样的,都是提供一种UDF方式,因为在工作中不是每个人都非常了解数据开发的技术占,尤其是在注重运营的企业中多数人就不是技术出身,因此让这些人从头开发一个Java-UDF函数、经历注册、区分永久或临时函数、在学会使用,那将是一个大到可怕的沟通成本

所以sparksql和hive,提供了 transform 用来调用其他类库代码处理,以常见的Python类库为例语法如下

--加载python的执行环境,也可以通过提交任务时的 spark.yarn.dist.archives
add archive 'hdfs://jdk/pyspark.tar.gz#py';
add file 'hdfs://jars/testTransform.py';
select
    transform(*) --这里的 * 意味着所有字段都传递
    using 'py/bin/python testTransform.py' as (a) --这里就是调用你的python脚本 (a) 表示输出的字段名称
    from ( select 1 as a ) ;--下面就是正常的查询语句

python脚本中需要调用 sys 模块接收数据,如下脚本

import sys

for line in sys.stdin:
    cols = line.strip().split('\t')
    name = cols[0]
    #多个字段之间指标符分割
    print(name + '\t123\t444')

对于最终的输出和字段映射,要格外注意,print方法输出的内容能够被sql中as部分对应,用制表符风格,以字符串的方式接收,如果你此时,强制写as (a string,b int)这种接收方式,会导致 a 字段的数据接收到之后,其他本该对应其他字段的数据全部丢失

而且再次强调,如果你是一个对数据开发很了解的技术出生,就不要用这个玩意,它相当娄,升值在spark部署向量化引擎插件之后transform就必须舍弃,否则向量化引擎无法转换

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值