第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Pyspark:有條件地用空格連接列

Pyspark:有條件地用空格連接列

holdtom 2023-10-11 15:40:07
鑒于我有下表:ColA     |   ColB   |  ColC  |  ColDName         BA         CC       DA      Name         BB         CC       DA我想檢查所有行的 ColB、ColC 和 ColD 值是否相同(名稱始終相同)。如果是,我需要按原樣返回我的 df 。如果不是,我應(yīng)該附加那些與我的 ColA 不同的內(nèi)容。因此,在這種情況下,如果 B 列不一致,我的結(jié)果表應(yīng)如下所示:ColA       |   ColB   |  ColC  |  ColDName BA        BA         CC       DA      Name BB        BB         CC       DA我遇到了一些麻煩,但我想出了這個(gè)功能。然而,問題是我無法讓它與空白一起工作。所以目前我的結(jié)果是這樣的:ColA       |   ColB   |  ColC  |  ColDNameBA        BA         CC       DA      NameBB        BB         CC       DA功能:def id(df, cols):  """  """  def is_not_unique_col(df, x):    """    """    if len(df.select(x).distinct().collect()) != 1:      return True    else:      return False  def concat_with_whitespace(*cols):    """    """    return F.concat(*[F.coalesce(c, F.lit(" ")) for c in cols])  non_unique_cols = [x for x in cols if is_not_unique_col(df, x)]  if len(non_unique_cols)>0:    df = df.withColumn("ColA_New", concat_with_whitespace("ColA", *non_unique_cols)).drop("ColA")    df = df.withColumnRenamed("ColA_New", "ColA").drop("ColA_New")    return df  else:    return df我有這個(gè)is_not_unique_col函數(shù),它檢查列是否具有多個(gè)值。我對(duì)所有列運(yùn)行它,那些返回 True 的列將附加到 non_unique_cols 列表中,該列表用作我的concat_with_whitespace函數(shù)的輸入。我已F.lit(" ")在其中添加了此內(nèi)容,以便獲得空白。一切似乎都是正確的,但我無法讓它發(fā)揮作用。如果有人能看一下,我將不勝感激,也許這是一些愚蠢的錯(cuò)誤。
查看完整描述

1 回答

?
哆啦的時(shí)光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊

我會(huì)給你一個(gè)不使用任何 UDF 的解決方案。


用于collect_set()獲取具有非唯一值的列名列表


from pyspark.sql import functions as F

from pyspark.sql.functions import *


diff_col = [i for i in df.schema.names if \

    (df.select(F.size(F.collect_set(i))).collect()[0][0] > 1)]

對(duì)于連接:


df.select(col("*"), concat(col("ColA"), lit(" "),concat(*diff_col))\

        .alias("concat_col")).show()


+----+----+----+----+----------+

|ColA|ColB|ColC|ColD|concat_col|

+----+----+----+----+----------+

|Name|  BA|  CC|  DA|   Name BA|

|Name|  BB|  CC|  DA|   Name BB|

+----+----+----+----+----------+

或者,如果您希望多列的連接之間有空格(如果您有多列非唯一值),則:


df.select(col("*"), concat(col("ColA"), lit(" "),\

    concat(*[F.concat(col(i),F.lit(" "))for i in diff_col])).alias("concat_col")).show()


查看完整回答
反對(duì) 回復(fù) 2023-10-11
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)