我正在使用下面的代碼:
df_logical = df_parcial.groupBy("customer_id", "person_id").agg(
when(expr("bool_and(is_online_store)"), "Online")
.when(expr("bool_and(!is_online_store)"), "Offline")
.when(expr("bool_and(is_online_store)").isNull(), None)
.otherwise("Hybrid").alias("type_person"))
我的規則如下:
- 如果 PersonId count(column) 有 1 或 Trues 且 None False 則 Online
- 如果 PersonId count(column) 有 1 或 False 并且 None True 然后離線
- 如果 PersonId 計數(列)至少有 1 個 False 和 1 個 True 則 Hybrid
但是當我去將代碼上傳到生產環境時,出現以下錯誤:
未定義的函式:'bool_and'。該函式既不是注冊的臨時函式,也不是在資料庫“默認”中注冊的永久函式。第 1 行 pos 0
我怎樣才能繞過這個錯誤?
表原件:
| 顧客 | 個人身份 | is_online_store |
|---|---|---|
| afabd2d2 | 4 | 真的 |
| afabd2d2 | 8 | 真的 |
| afabd2d2 | 3 | 真的 |
| afabd2d2 | 2 | 錯誤的 |
| afabd2d2 | 4 | 錯誤的 |
表應該是:
| 顧客 | 個人身份 | type_person |
|---|---|---|
| afabd2d2 | 4 | 雜交種 |
| afabd2d2 | 8 | 在線的 |
| afabd2d2 | 3 | 在線的 |
| afabd2d2 | 2 | 離線 |
uj5u.com熱心網友回復:
您會收到該錯誤,因為bool_and自 Spark 3 起該功能才可用。您可以使用如下條件計數來實作相同的功能:
df_logical = df_parcial.groupBy("customer", "PersonId").agg(
F.when(
F.count(F.when(F.col("is_online_store") == "true", 1)) == F.count("*"), "Online"
).when(
F.count(F.when(F.col("is_online_store") == "false", 1)) == F.count("*"), "Offline"
).otherwise("Hybrid").alias("New_Column")
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429925.html
標籤:Python 阿帕奇火花 pyspark apache-spark-sql
