pyspark.sql.functions.udf¶
-
pyspark.sql.functions。
udf
( f:聯盟(可調用的[[…],任何],DataTypeOrString,沒有)=沒有一個,returnType:DataTypeOrString=StringType () )→聯盟[UserDefinedFunctionLike,可調用的[[可調用的[[…],任何]],UserDefinedFunctionLike]]¶ -
創建一個用戶定義函數(UDF)。
- 參數
-
- f 函數
-
如果使用python函數作為一個獨立的函數
-
returnType
pyspark.sql.types.DataType
或str -
用戶定義的函數的返回類型。值可以是
pyspark.sql.types.DataType
對象或DDL-formatted類型字符串。
筆記
默認用戶定義函數被認為是確定的。由於優化,重複調用可能被淘汰或甚至可能調用的函數多次出現在查詢。如果你的函數不確定性,電話asNondeterministic用戶定義函數。例如:
> > >從pyspark.sql.types進口IntegerType> > >進口隨機> > >random_udf=udf(λ:int(隨機。隨機()*One hundred.),IntegerType())。asNondeterministic()
用戶定義的函數不支持條件表達式或短路的布爾表達式,它最終被執行所有的內部。如果在特殊行,函數可以失敗的解決方法是將條件的函數。
用戶定義的函數不帶關鍵字參數調用。
例子
> > >從pyspark.sql.types進口IntegerType> > >slen=udf(λ年代:len(年代),IntegerType())> > >@udf…defto_upper(年代):…如果年代是不沒有一個:…返回年代。上()…> > >@udf(returnType=IntegerType())…defadd_one(x):…如果x是不沒有一個:…返回x+1…> > >df=火花。createDataFrame(((1,“John Doe”,21)),(“id”,“名稱”,“年齡”))> > >df。選擇(slen(“名稱”)。別名(“slen(名稱)”),to_upper(“名稱”),add_one(“年齡”))。顯示()+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +| slen(名字)| to_upper(名字)| add_one(年齡)|+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +| | 8 JOHN DOE | 22 |+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +