2017-09-11 119 views
1

我有一個pyspark數據框,其中一些列包含字符串數組(並且一列包含嵌套數組)。因此,我無法將數據框寫入csv。將數組<string>轉換爲字符串pyspark數據框

這裏是我處理的數據幀的一個例子 -

+-------+--------------------+---------+ 
    |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。非常感謝您的幫助。謝謝!

+1

「clicked」列是否總是有這種格式 - [[value]]或可以是[[val1,val2 ...]]'? –

回答

4

你可以試試這種方式。您將不得不導入模塊

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

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

getterUDF = udf(getter, StringType()) 

df.select(getterUDF(Ur_Array_Column)) 

你也可以試試這個。

+0

不確定上述答案是否有效。正如我檢查,分裂在這裏工作在字符串。你也可以在Stack Overflow上查看這個。 https://stackoverflow.com/questions/37689878/select-array-element-from-spark-dataframes-split-method-in-same-call –

+0

您可以使用此功能: –

+0

謝謝concat_ws適用於我。 – user42361