0

私はデータフレームに2つの配列フィールドを持っています。2つの配列を比較し、PySparkの違いを得る

enter image description here

Iは、これら二つの配列を比較して同一のデータフレーム内のアレイ(新しい列)との差を取得するための要件を持っています。

期待出力は次のとおり

enter image description here

列Bワードが両方の配列において同一の順序であることを行っている。また、列Aのサブセットです。

この問題の解決方法を教えてもらえますか?

答えて

1

ユーザー定義関数を使用できます。私の例のデータフレームは、あなたから少し異なりますが、コードは正常に動作する必要があります:

import pandas as pd 
from pyspark.sql.types import * 

#example df 
df=sqlContext.createDataFrame(pd.DataFrame(data=[[["hello", "world"], 
["world"]],[["sample", "overflow", "text"], ["sample", "text"]]], columns=["A", "B"])) 

# define udf 
differencer=udf(lambda x,y: list(set(x)-set(y)), ArrayType(StringType())) 
df=df.withColumn('difference', differencer('A', 'B')) 

EDIT:

セットのみユニークを保持して、重複がある場合、これは動作しません。次のようにだから、UDFを修正することができます。

differencer=udf(lambda x,y: [elt for elt in x if elt not in y]), ArrayType(StringType())) 
+0

おかげでトンags29..Itは一つだけ疑問:-)魔法のように仕事をした、それは重複を削除し、すべての値を保持する方法はありますtoo..Is ? – Joe

+0

良い点、私はudfを改訂しました – ags29

+0

もう一度おねがいします...今は重複を保持しています:-)私はあなたが追加することを忘れてしまったと思うコマンドにリストを追加しなければならなかった... differencer = udf(lambda x、 y:list([yにeltが含まれていない場合はxのeltのelt])、ArrayType(StringType())) – Joe

関連する問題