python – PySpark.将Dataframe传递给pandas_udf并返回一个系列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – PySpark.将Dataframe传递给pandas_udf并返回一个系列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1283字,纯文字阅读大概需要2分钟。
内容图文
我正在使用PySpark的新pandas_udf装饰器,我试图让它将多列作为输入并返回一个系列作为输入,但是,我得到一个TypeError:无效的参数
示例代码
@pandas_udf(df.schema, PandasUDFType.SCALAR)
def fun_function(df_in):
df_in.loc[df_in['a'] < 0] = 0.0
return (df_in['a'] - df_in['b']) / df_in['c']
解决方法:
A SCALAR udf期望pandas系列作为输入而不是数据帧.对于您的情况,没有必要使用udf.剪切后列a,b,c的直接计算应该起作用:
import pyspark.sql.functions as f
df = spark.createDataFrame([[1,2,4],[-1,2,2]], ['a', 'b', 'c'])
clip = lambda x: f.when(df.a < 0, 0).otherwise(x)
df.withColumn('d', (clip(df.a) - clip(df.b)) / clip(df.c)).show()
#+---+---+---+-----+
#| a| b| c| d|
#+---+---+---+-----+
#| 1| 2| 4|-0.25|
#| -1| 2| 2| null|
#+---+---+---+-----+
如果你必须使用pandas_udf,你的返回类型需要是double,而不是df.schema,因为你只返回一个pandas系列而不是pandas数据帧;此外,您还需要将列作为Series传递给函数而不是整个数据框:
@pandas_udf('double', PandasUDFType.SCALAR)
def fun_function(a, b, c):
clip = lambda x: x.where(a >= 0, 0)
return (clip(a) - clip(b)) / clip(c)
df.withColumn('d', fun_function(df.a, df.b, df.c)).show()
#+---+---+---+-----+
#| a| b| c| d|
#+---+---+---+-----+
#| 1| 2| 4|-0.25|
#| -1| 2| 2| null|
#+---+---+---+-----+
内容总结
以上是互联网集市为您收集整理的python – PySpark.将Dataframe传递给pandas_udf并返回一个系列全部内容,希望文章能够帮你解决python – PySpark.将Dataframe传递给pandas_udf并返回一个系列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。