С Spark-2.4
:
Мы можем использовать функцию array_intersect
с размером, чтобы объединять только размер строки! = 0.
- (или )
arrays_overlap
и присоединение к логическому TRUE
Example:
df=spark.createDataFrame([(1,[1,2,3]),(2,[4,5])],["id","my_arr"])
df1=spark.createDataFrame([(1,[2,3]),(2,[8,9])],["id","my_arr"])
df.createOrReplaceTempView("tbl")
df1.createOrReplaceTempView("tbl_b")
spark.sql("select a.id from tbl a join tbl_b b on arrays_overlap(a.my_arr,b.my_arr) = TRUE").show()
spark.sql("select a.id from tbl a join tbl_b b on SIZE(array_intersect(a.my_arr,b.my_arr)) != 0").show()
#+---+
#| id|
#+---+
#| 1|
#+---+