簡體   English   中英

如何將火花 dataframe 中的所有列值連接到 Python 中的字符串中?

[英]How to concat all column values in a spark dataframe into a String in Python?

我正在嘗試將列中的所有值連接起來,以用逗號分隔值從中生成一個字符串。 為此,我在 Scala 中編寫了以下代碼:

val pushLogIds = incLogIdDf.select($"interface_log_id").collect().map(_.getInt(0).toString).mkString(",")

我是 Python 的新手,在選擇列中的值后,我無法找到 Python 的邏輯,以便在收集所有列值后將它們連接到字符串。

final_log_id_list = logidf.select("interface_log_id").collect()

前任:

interface_log_id
----------------
     1
     2
     3
     4

Output: a variable of String containing '1,2,3,4'

誰能讓我知道如何將 dataframe 的所有列值連接成一個逗號分隔值的字符串。

要將列轉換為單個字符串,您可以首先使用collect_list將列收集為列表,然后與,連接,最后使用first將第一個值作為標量獲取:

df.agg(F.concat_ws(",",F.collect_list(F.col("interface_log_id")))).first()[0]
#'1,2,3,4'

另一種方法是 collect_list ,然后使用 python ','.joinmap進行數字列

','.join(map(str,df.agg(F.collect_list(F.col("A"))).first()[0]))

添加基准:

%timeit ','.join(map(str,df.agg(F.collect_list(F.col("A"))).first()[0]))
#9.38 s ± 133 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit df.agg(F.concat_ws(",",F.collect_list(F.col("A")))).first()[0]
#9.46 s ± 246 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

暫無
暫無

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

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