0
데이터 프레임에 두 개의 배열 필드가 있습니다.두 배열을 비교하고 PySpark에서 차이를 얻으려면
I는 이들 두 개의 배열을 비교하여 동일한 데이터 프레임 배열 (새 항목) 등의 차이를 취득하는 요구가있다.
예상 출력은 :
열 B는 또한 단어 배열 모두에 같은 순서로 될 것이다 열 A의 하위 집합이다.
아무에게도 해결책을 제공 할 수 있습니까?
데이터 프레임에 두 개의 배열 필드가 있습니다.두 배열을 비교하고 PySpark에서 차이를 얻으려면
I는 이들 두 개의 배열을 비교하여 동일한 데이터 프레임 배열 (새 항목) 등의 차이를 취득하는 요구가있다.
예상 출력은 :
열 B는 또한 단어 배열 모두에 같은 순서로 될 것이다 열 A의 하위 집합이다.
아무에게도 해결책을 제공 할 수 있습니까?
사용자 정의 함수를 사용할 수 있습니다. 내 예를 들어 dataframe 너의에서 약간의 차이가 있지만, 코드가 잘 작동합니다 :
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'))
편집 :
세트 만 순 방문자를 유지로 중복이있는 경우이 작동하지 않습니다. 다음과 같이 그래서 당신은 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 ([elt가 y에없는 경우 x에있는 elt의 elt]), ArrayType (StringType())) – Joe