0
私はデータフレームに2つの配列フィールドを持っています。2つの配列を比較し、PySparkの違いを得る
Iは、これら二つの配列を比較して同一のデータフレーム内のアレイ(新しい列)との差を取得するための要件を持っています。
期待出力は次のとおり
列Bワードが両方の配列において同一の順序であることを行っている。また、列Aのサブセットです。
この問題の解決方法を教えてもらえますか?
私はデータフレームに2つの配列フィールドを持っています。2つの配列を比較し、PySparkの違いを得る
Iは、これら二つの配列を比較して同一のデータフレーム内のアレイ(新しい列)との差を取得するための要件を持っています。
期待出力は次のとおり
列Bワードが両方の配列において同一の順序であることを行っている。また、列Aのサブセットです。
この問題の解決方法を教えてもらえますか?
ユーザー定義関数を使用できます。私の例のデータフレームは、あなたから少し異なりますが、コードは正常に動作する必要があります:
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()))
おかげでトンags29..Itは一つだけ疑問:-)魔法のように仕事をした、それは重複を削除し、すべての値を保持する方法はありますtoo..Is ? – Joe
良い点、私はudfを改訂しました – ags29
もう一度おねがいします...今は重複を保持しています:-)私はあなたが追加することを忘れてしまったと思うコマンドにリストを追加しなければならなかった... differencer = udf(lambda x、 y:list([yにeltが含まれていない場合はxのeltのelt])、ArrayType(StringType())) – Joe