以下に示す形式のデータフレームがあります。
movieId1 | genreList1 | genreList2
--------------------------------------------------
1 |[Adventure,Comedy] |[Adventure]
2 |[Animation,Drama,War] |[War,Drama]
3 |[Adventure,Drama] |[Drama,War]
ジャンルリスト2がジャンルリスト1のサブセットであるかどうかを示す別のフラグ列を作成しようとしています
movieId1 | genreList1 | genreList2 | Flag
---------------------------------------------------------------
1 |[Adventure,Comedy] | [Adventure] |1
2 |[Animation,Drama,War] | [War,Drama] |1
3 |[Adventure,Drama] | [Drama,War] |0
私はこれを試しました
def intersect_check(a: Array[String], b: Array[String]): Int = {
if (b.sameElements(a.intersect(b))) { return 1 }
else { return 2 }
}
def intersect_check_udf =
udf((colvalue1: Array[String], colvalue2: Array[String]) => intersect_check(colvalue1, colvalue2))
data = data.withColumn("Flag", intersect_check_udf(col("genreList1"), col("genreList2")))
しかし、これはorg.apache.spark.SparkException: Failed to execute user defined function.
エラーをスローします。これを解決する方法についてのアイデア。PS: 上記の関数 ( intersect_check
) はArray
s に対して機能します。