我正在閱讀“Spark Definitive guide”一書,在做一個代碼示例時,我無法完全理解邏輯。下面是書中的代碼。
simpleColors = ["black", "white", "green", "blue", "red" ]
def color_locator(column, color_string):
return locate(color_string.upper(), column).cast("boolean").alias("is_" color_string)
selectedColumns = [color_locator(df.Description, c) for c in simpleColors ]
selectedColumns.append(expr("*"))
df.select(*selectedColumns).where(expr("is_white OR is_red")).select("Description").show(3,False)
我不明白selectedColumns.append(expr("*")) 代碼中的行。這有什么作用。在書中它說要確保 selectedColumns 必須是 Column 型別,我們需要這樣做。這對我來說是完整的保鏢。在下一個陳述句中,我們使用df.select(*selectedColumns) . 為什么我們首先需要 * 運算式?請幫我解決困惑
uj5u.com熱心網友回復:
此代碼只是添加列運算式,它將獲取 Dataframe 的所有現有列到我們創建的新列串列中selectedColumns。當您想將多個列添加到 Dataframe 而不使用回圈時,這是一種標準模式.withColumn(效率低于.select)。expr("*")具有與 相同的效果[selectedColumns.append(col(nm)) for nm in df.columns]。
在這種特定情況下,選擇的結果將是幾列is_black,,is_red... Dataframe 的所有列。
uj5u.com熱心網友回復:
讓我嘗試將其分解,以便您了解正在發生的事情:
selectedColumns = [color_locator(df.Description, c) for c in simpleColors ]
在這一行中,我們將遍歷 simpleColors 中的顏色并創建一個 selectedColumns 串列。此時, selectedColumns 包含列“is_black”、“is_green”、“is_blue”、“is_red”。請注意這不包含描述列。
下一行,
selectedColumns.append(expr("*"))
基本上是將原始資料框中的每一列添加到這個 selectedColumns 串列中(這是一種速記,而不是顯式添加每一列)。
此時 selectedColumns 包含列“is_black”、“is_green”、“is_blue”、“is_red”、“*”
df.select(*selectedColumns).where(expr("is_white OR is_red")).select("Description").show(3,False)
在這一行中 *selectedColumns 表示我們正在傳遞可變數量的引數,您可以在此處閱讀更多資訊:https ://www.geeksforgeeks.org/args-kwargs-python/
總而言之,我們正在從原始資料幀 (df) 中選擇列 is_black、is_green、is_blue、is_red 和 *。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410846.html
標籤:
