2016-05-17 10 views
9

にPySparkデータフレームのArrayTypeフィールドを組み合わせる:私は2つのArrayTypeフィールドでPySparkデータフレームを持つ単一のArrayTypeフィールド

>>>df 
DataFrame[id: string, tokens: array<string>, bigrams: array<string>] 
>>>df.take(1) 
[Row(id='ID1', tokens=['one', 'two', 'two'], bigrams=['one two', 'two two'])] 

私は、単一のArrayTypeフィールドにそれらを結合したいと思います:

>>>df2 
DataFrame[id: string, tokens_bigrams: array<string>] 
>>>df2.take(1) 
[Row(id='ID1', tokens_bigrams=['one', 'two', 'two', 'one two', 'two two'])] 

構文文字列で動作するものはここでは動作しません。

df2 = df.withColumn('tokens_bigrams', df.tokens + df.bigrams) 

ありがとう!

答えて

15

残念ながら、あなたはこのような、たとえば、UDFをする必要があります一般的なケースでarrayの列を連結するには:

from itertools import chain 
from pyspark.sql.functions import col, udf 
from pyspark.sql.types import * 

def concat(type): 
    def concat_(*args): 
     return list(chain(*args)) 
    return udf(concat_, ArrayType(type)) 


concat_string_arrays = concat(StringType()) 

df.select(concat_string_arrays(col("tokens"), col("bigrams"))) 
+2

何の値のいずれかが列にnullの場合?これはudfの上で壊れます。 – Jeroen

関連する問題