python - 将所有 pyspark 数据帧列连接成一个字符串列

标签 python dataframe pyspark concatenation

我有以下 pyspark 数据框

<表类=“s-表”> <标题> 标识 p1 p2 p3 p4 <正文> 1 1 0 0 1 2 0 1 1 0 3 0 0 0 1

我想连接从 p1 到 p4 的所有列,以这种方式收集 1 和 0 的值

<表类=“s-表”> <标题> 标识 p1 p2 p3 p4 joined_column <正文> 1 1 0 0 1 1001 2 0 1 1 0 0110 3 0 0 0 1 0001

从 p1 到 p4 的所有列都是整数,因此我尝试在以这种方式连接所有列(“identification”列除外)之前将它们转换为字符串:


from pyspark.sql.types import StringType 
from pyspark.sql import functions as F

df_concat=df.withColumn('joined_column', F.concat([F.col(c).cast(StringType()) for c in df.columns if  c!='identification']))

我收到以下错误:

TypeError: Invalid argument, not a string or column: 

是否有任何解决方案或其他方法可以将 pyspark 数据帧的所有列连接成一个字符串?

最佳答案

您必须使用concat_ws

from pyspark.sql.functions import concat_ws
df = df.withColumn('joined_column',concat_ws('',df.p1, df.p2, df.p3, df.p4))

关于python - 将所有 pyspark 数据帧列连接成一个字符串列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73907438/

相关文章:

python - NARX PyNeurgen 库

python - 在两个数据框列之间执行计算的最快方法?

python - 如何从 Pyspark RDD 中删除空行

apache-spark - 如何计算 Spark Structured Streaming 中的滞后差异?

python - "Incorrect number of bindings supplied"cPython 3.5 SQLite3 VS15

python - 一个词在一个文件中出现了多少次?

python - 在 jupyter 上为随时间变化的图设置 matplotlib 后端

dataframe - 如何使用 Spark DataFrames 查询 JSON 数据列?

r - 在 R 中绘制 data.frame

python - 终端中的 Pyspark 命令启动 Jupyter notebook