繁体   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