簡體   English   中英

如何使用 Pyspark DataFrame 創建具有空值的新列?

[英]How to create a new column with a null value using Pyspark DataFrame?

我在使用 pyspark 數據框時遇到問題。 我有一個名為eventkey的列,它是以下元素的串聯: account_typecounter_typebillable_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_typecounter_typebillable_item_sid 我有一個名為 EventKey 的類,它將完整的 eventkey 字符串作為構造函數參數,並創建一個具有數據成員的對象以訪問account_typecounter_typebillable_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 值的新列?

我嘗試過的事情(出於測試目的):

  1. .withColumn("billable_item_sid", 點亮(getBiSidUDF(data_frame.eventkey)))
  2. .withColumn("billable_item_sid", 點亮(None).castString())
  3. 嘗試了 billable_item_sid 的 when/otherwise 條件以進行空檢查

發現問題是在將 DataFrame 寫入 json 時引起的。通過將 pyspark 升級到 3.1.1 解決了這個問題,它有一個名為ignoreNullFields=False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM