我在瀏覽一個長的 python Jupyter 筆記本時遇到了 PySpark 中的以下 lambda 代碼行,我試圖理解這行代碼。你能以最好的方式解釋它的作用嗎?
parse = udf (lambda x: (datetime.datetime.utcnow() - timedelta(hours= x)).isoformat()[:-3] 'Z', StringType())
uj5u.com熱心網友回復:
udf(
lambda x: (datetime.datetime.utcnow() - timedelta(hours=x)).isoformat()[:-3] 'Z',
StringType()
)
udf在 PySpark 中分配一個Python函式,該函式為 Spark df 的每一行運行。
創建用戶定義函式 (UDF)。
版本 1.3.0 中的新功能。
引數:
- f :函式
python 函式,如果用作獨立函式- returnType : pyspark.sql.types.DataType或 str
用戶定義函式的回傳型別。該值可以是pyspark.sql.types.DataType物件或 DDL 格式的型別字串。
將returnType是一個字串。洗掉它,我們得到我們感興趣的函式體:
lambda x: (datetime.datetime.utcnow() - timedelta(hours=x)).isoformat()[:-3] 'Z'
為了找出給定的 lambda 函式的作用,您可以從中創建一個常規函式。您可能還需要添加匯入。
import datetime
from datetime import timedelta
def func(x):
return (datetime.datetime.utcnow() - timedelta(hours= x)).isoformat()[:-3] 'Z'
要真正了解發生了什么,您可以從每個元素和print它們中創建變數。
import datetime
from datetime import timedelta
def my_func(x):
v1 = datetime.datetime.utcnow()
v2 = timedelta(hours=x)
v3 = v1 - v2
v4 = v3.isoformat()
v5 = v4[:-3]
v6 = v5 'Z'
[print(e) for e in (v1, v2, v3, v4, v5)]
return v6
print(my_func(3))
# 2022-06-17 07:16:36.212566
# 3:00:00
# 2022-06-17 04:16:36.212566
# 2022-06-17T04:16:36.212566
# 2022-06-17T04:16:36.212
# 2022-06-17T04:16:36.212Z
通過這種方式,您可以看到每一步之后結果如何變化。你可以print在任何你需要的步驟中做任何你想做的事。例如print(type(v4))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/494574.html
標籤:Python 阿帕奇火花 pyspark apache-spark-sql 用户定义函数
下一篇:回傳按鍵排序的地圖值
