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

Posted

技术标签:

【中文标题】将 array<string> 转换为字符串 pyspark 数据帧【英文标题】:Convert array<string> into string pyspark dataframe 【发布时间】:2018-02-19 21:46:57 【问题描述】:

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

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

    +-------+--------------------+---------+
    |ID     |             emailed| clicked
    +-------+--------------------+---------+
    |9000316|[KBR, NRT, AOR]     |[[AOR]]  
    |9000854|[KBR, NRT, LAX]     | Null 
    |9001996|[KBR, JFK]          |[[JFK]] 
    +-------+--------------------+---------+

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

    +-------+--------------------+---------+
    |ID     |             emailed| clicked
    +-------+--------------------+---------+
    |9000316|KBR, NRT, AOR       | AOR  
    |9000854|KBR, NRT, LAX       | Null 
    |9001996|KBR, JFK            | JFK 
    +-------+--------------------+---------+

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

【问题讨论】:

clicked 是否总是采用这种格式-[[value]] 或者可以是[[val1,val2...]] 【参考方案1】:

你可以试试这个方法。您必须导入模块

import pyspark.sql.functions.*
df.select(concat_ws(',', split(df.emailed)).alias('string_form')).collect()

如果有帮助,请告诉我。

-----更新----

链接中的代码解释,我修改了一下。

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))

你也可以试试这个。

【讨论】:

不确定上述答案是否有效。正如我所检查的, split 在这里适用于字符串。您也可以在 Stack Overflow 上查看。 ***.com/questions/37689878/… 你可以使用这个功能: 你必须改变 i==0 而不是 i==1 同意。编辑一样。谢谢

以上是关于将 array<string> 转换为字符串 pyspark 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

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

无法将“Swift.Array<Any>”类型的值转换为“Swift.Dictionary<Swift.String, Any>”

c++怎么把cli::array<string^>转换成cli::array<int>

将 List<String> 转换为分隔字符串 [重复]

如何将数组<string>转换为hive中的字符串

Java:将 List<String> 转换为 join()d String