Pyspark UDF的几种方式

  创建上图所示dataframe,供下面举例使用

1.注册 可在sql中运行

from pyspark.sql.types import *
def pow1(m,n):
    return float(m)**float(n)
udf = spark.udf
udf.register('pow1',pow1,returnType=DoubleType())

#将dataframe注册成临时表A
df.createOrReplaceTempView('A')

print(spark.sql('select pow1(id,2) from A').show())
print(spark.sql('select pow1(id,3) from A').show())

 ​​​​​​​ 

 2.可在dataframe中新增列使用

from pyspark.sql.functions import lit, udf
def pow2(m,n):
    return float(m)**float(n)+4
pow2=udf(pow2)
df2=df.withColumn("id_", pow2("id","id"))
print(df2.show())

  

3.map 中使用的Python普通函数

def pow3(m):
    return float(m)**float(m)
rdd=df.rdd.map(lambda x:(pow3(x['id']),x['id'],x['tag'],x['value']))
print(rdd.collect())
df3=spark.createDataFrame(rdd,['id_','id','tag','value'])
print(df3.show())

4.transform 调用python环境sql运行

import sys
import datetime
for line in sys.stdin:
    #获取每一行的内容并去掉头尾的空格
    line = line.strip()
    #根据换行符截取对应的字段
    movie,rate,timeinfo,userid = line.split('\t')
    #将timeinfo转成时间格式
    weekday = datetime.datetime.fromtimestamp(float(timeinfo)).isoweekday()
    #重新拼接拼接新的内容并加入换行符
    print '\t'.join([movie, rate, str(weekday),userid])
insert into table lastjsontable 
select transform(movie,rate,unixtime,userid)
using 'python datechange.py' as(movie,rate,weekday,userid) 
from rate;

Hive的Transform的实现 - 薄点 - 博客园​​​​​​​

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值