[英]How to create a new column with a null value using Pyspark DataFrame?
我在使用 pyspark 數據框時遇到問題。 我有一個名為eventkey的列,它是以下元素的串聯: account_type 、 counter_type和billable_item_sid 。 我有一個名為apply_event_key_transform的函數,我想在其中分解串聯的eventkey並為每個元素創建新列。
def apply_event_key_transform(data_frame: DataFrame):
output_df = data_frame.withColumn("account_type", getAccountTypeUDF(data_frame.eventkey)) \
.withColumn("counter_type", getCounterTypeUDF(data_frame.eventkey)) \
.withColumn("billable_item_sid", getBiSidUDF(data_frame.eventkey))
output_df.drop("eventkey")
return output_df
我創建了 UDF 函數來從給定的eventkey值中檢索account_type 、 counter_type和billable_item_sid 。 我有一個名為 EventKey 的類,它將完整的 eventkey 字符串作為構造函數參數,並創建一個具有數據成員的對象以訪問account_type 、 counter_type和billable_item_sid 。
getAccountTypeUDF = udf(lambda x: get_account_type(x))
getCounterTypeUDF = udf(lambda x: get_counter_type(x))
getBiSidUDF = udf(lambda x: get_billable_item_sid(x))
def get_account_type(event_key: str):
event_key_obj = EventKey(event_key)
return event_key_obj.account_type.name
def get_counter_type(event_key: str):
event_key_obj = EventKey(event_key)
return event_key_obj.counter_type
def get_billable_item_sid(event_key: str):
event_key_obj = EventKey(event_key)
return event_key_obj.billable_item_sid
我遇到的問題是billable_item_sid可以為空,但是當我嘗試使用 None 調用 withColumn 時,當我稍后嘗試聚合數據時,整個幀都會丟棄該列。 有沒有辦法使用 withColumn 和 UDF 創建一個具有 Null 值的新列?
我嘗試過的事情(出於測試目的):
發現問題是在將 DataFrame 寫入 json 時引起的。通過將 pyspark 升級到 3.1.1 解決了這個問題,它有一個名為ignoreNullFields=False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.