大佬教程收集整理的这篇文章主要介绍了pyspark UDF 返回 AttributeError: 'DataFrame' 对象没有属性 'sort_values',大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的程序遇到了困难,我正在尝试将 UDF 应用于数据帧并根据我的标题收到错误消息。这是我的代码
import pandas as pd
import datetiR_614_11845@e as dt
import numpy as np
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
df = pd.DataFrame({
'ID':[1,2,2],'dt':[pd.timestamp.Now(),pd.timestamp.Now(),pd.timestamp.Now()]})
df.head()
def FlagUsers(df,IDs,tm,gap):
df=df.sort_values([IDs,tm])
df[IDs]=df[IDs].astype(str)
df['timediff'] = df.groupby(IDs)[tm].diff()
df['prevtime']= df.groupby (IDs)[tm].shift()
df['prevuser']= df[IDs].shift()
df['prevuser'].fillna(0,inplace=TruE)
df['timediff']=df.timediff/ pd.timedelta('1 minute')
df['timediff'].fillna(99,inplace=TruE)
df['flagnew']=np.where((df.timediff<gap) & (df['prevuser']==df[IDs]),'exisTing','new' )
df.loc[df.flagnew == 'new','sessnum'] = df.groupby([IDs,'flagnew']).cumcount()+1
df['sessnum']=df['sessnum'].fillna(method='ffill')
df['session_key']= df[IDs].astype(str)+"_"+df['sessnum'].astype(str)
df.drop(['prevtime','prevuser'],axis =1,inplace= TruE)
arr=df['session_key'].values
return arr
# Python Function works fine:
FlagUsers(df,'ID','dt',5)
s_df = spark.createDataFrame(df)
s_df.show()
spark.udf.register("FlagUsers",FlagUsers)
s_df = s_df.withcolumn('session_key',FlagUsers(s_df,5))
我的函数在 python 中运行良好,但是当我尝试在 Spark 中运行它时它不起作用?如果这是一个愚蠢的问题,我真的很抱歉!谢谢和祝福
pyspark udf 与其他原生 python udf 不同,它有特定的要求,
请尝试使用 pandas udf。
它快好几倍 https://docs.databricks.com/spark/latest/spark-sql/udf-python-pandas.html
以上是大佬教程为你收集整理的pyspark UDF 返回 AttributeError: 'DataFrame' 对象没有属性 'sort_values'全部内容,希望文章能够帮你解决pyspark UDF 返回 AttributeError: 'DataFrame' 对象没有属性 'sort_values'所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。