将 array<string> 转换为字符串 pyspark 数据帧

use*_*361 5 csv nested flatten pyspark spark-dataframe

我有一个 pyspark 数据框,其中一些列包含字符串数组(一列包含嵌套数组)。因此,我无法将数据帧写入 csv。

这是我正在处理的数据框的示例 -

    +-------+--------------------+---------+
    |ID     |             emailed| clicked
    +-------+--------------------+---------+
    |9000316|[KBR, NRT, AOR]     |[[AOR]]  
    |9000854|[KBR, NRT, LAX]     | Null 
    |9001996|[KBR, JFK]          |[[JFK]] 
    +-------+--------------------+---------+
Run Code Online (Sandbox Code Playgroud)

我想获得以下结构,以保存为 csv。

    +-------+--------------------+---------+
    |ID     |             emailed| clicked
    +-------+--------------------+---------+
    |9000316|KBR, NRT, AOR       | AOR  
    |9000854|KBR, NRT, LAX       | Null 
    |9001996|KBR, JFK            | JFK 
    +-------+--------------------+---------+
Run Code Online (Sandbox Code Playgroud)

我对 pyspark 很陌生。非常感谢您的帮助。谢谢!

Man*_*pta 6

你可以试试这个方法。您将不得不导入模块

import pyspark.sql.functions.*
df.select(concat_ws(',', split(df.emailed)).alias('string_form')).collect()
Run Code Online (Sandbox Code Playgroud)

如果这有帮助,请告诉我。

- - -更新 - -

链接中解释了代码,我稍作修改。

from pyspark.sql.functions import *
from pyspark.sql.types import *

def getter(column):
    col_new=''
    for i,col in enumerate(column):
        if i==0:
           col_new=col
        else:
           col_new=col_new+','+col
    return col_new

getterUDF = udf(getter, StringType())

df.select(getterUDF(Ur_Array_Column))
Run Code Online (Sandbox Code Playgroud)

你也可以试试这个。