pyspark concat_ws 用于数组到字符串

Posted

技术标签:

【中文标题】pyspark concat_ws 用于数组到字符串【英文标题】:pyspark concat_ws for array to string 【发布时间】:2021-04-11 15:01:55 【问题描述】:

我有一个 pyspark 数据框,其中包含字符串、整数和数组类型列。我正在尝试为所有列运行 for 循环以检查它们是否是任何数组类型列并将其转换为字符串。

pyspark 数据框中的输出应该包含 int,string 列。

我有以下代码,但它失败并出现以下错误。修复此错误的任何建议

df2 = df.select([df.withColumn(c,F.concat_ws(",",col(c))).alias(c)  if dict(df.dtypes)[c] in 'array<string>' else F.col(c) for c in df.columns])

错误:对于列文字,请使用“lit”、“array”、“struct”或“create_map”函数。

【问题讨论】:

【参考方案1】:

您不能将withColumn 放在select 中。试试下面的代码:

import pyspark.sql.functions as F

df2 = df.select([
    F.concat_ws(",", c).alias(c)  
    if dict(df.dtypes)[c] == 'array<string>'
    else F.col(c)  
    for c in df.columns
])

【讨论】:

以上是关于pyspark concat_ws 用于数组到字符串的主要内容,如果未能解决你的问题,请参考以下文章

concat和concat_ws

在pyspark数据框的列中使用正则表达式捕获两个字符串之间的第一次出现的字符串

将数据帧的每一行转换为字符串

Pyspark:从 Struct 中识别 arrayType 列并调用 udf 将数组转换为字符串

json的Pyspark问题具有字符串和数组值的字段

如果STRING_AGG不为空或NULL,则将CONCAT / CONCAT_WS与STRING_AGG一起使用字符串来结果?