1
가정하자 나는 나를주는 다음과 같은 경우를 확인하는 방법
from pyspark.sql.types import *
schema = StructType([ # schema
StructField("id", StringType(), True),
StructField("ev", ArrayType(StringType()), True),
StructField("ev2", ArrayType(StringType()), True),])
df = spark.createDataFrame([{"id": "se1", "ev": ["ev11", "ev12"], "ev2": ["ev11"]},
{"id": "se2", "ev": ["ev11"], "ev2": ["ev11", "ev12"]},
{"id": "se3", "ev": ["ev21"], "ev2": ["ev11", "ev12"]},
{"id": "se4", "ev": ["ev21", "ev22"], "ev2": ["ev21", "ev22"]}],
schema=schema)
있습니다
df.show()
+---+------------+------------+
| id| ev| ev2|
+---+------------+------------+
|se1|[ev11, ev12]| [ev11]|
|se2| [ev11]|[ev11, ev12]|
|se3| [ev21]|[ev11, ev12]|
|se4|[ev21, ev22]|[ev21, ev22]|
+---+------------+------------+
내가 부울의 새 열을 만들려면에게 "ev"열의 내용이 "ev2"열 안에있는 행에 대해 (또는 실제 사례 만 선택하여) 다음을 반환하는 결과를 반환합니다.
나 :
df_target.show()
+---+------------+------------+-------+
| id| ev| ev2|evInEv2|
+---+------------+------------+-------+
|se1|[ev11, ev12]| [ev11]| false|
|se2| [ev11]|[ev11, ev12]| true|
|se3| [ev21]|[ev11, ev12]| false|
|se4|[ev21, ev22]|[ev21, ev22]| true|
+---+------------+------------+-------+
나는
isin
방법을 사용하여 시도
:
df.withColumn('evInEv2', df['ev'].isin(df['ev2'])).show()
+---+------------+------------+-------+
| id| ev| ev2|evInEv2|
+---+------------+------------+-------+
|se1|[ev11, ev12]| [ev11]| false|
|se2| [ev11]|[ev11, ev12]| false|
|se3| [ev21]|[ev11, ev12]| false|
|se4|[ev21, ev22]|[ev21, ev22]| true|
+---+------------+------------+-------+
를하지만이 같은 배열의 경우이 같은 경우에만 검사 보인다.
또한 pyspark.sql.functions
에서 array_contains
함수를 시도했지만 검사 할 배열이 아닌 하나의 객체 만 허용했습니다.
올바른 문제를 말하기 때문에이 문제를 검색하는 데 어려움이 있습니다.
감사합니다.
효과가있었습니다. 감사! 나는 udfs 사용에 대해서 생각조차하지 않았다. – dtj