我有一个表,其中有一个名为writer
的数组类型列,其值为array[value1, value2]
、array[value2, value3]
等。
我正在执行self join
以获取数组之间具有公共值的结果。我尝试了:
sqlContext.sql("SELECT R2.writer FROM table R1 JOIN table R2 ON R1.id != R2.id WHERE ARRAY_INTERSECTION(R1.writer, R2.writer)[0] is not null ")
还有
sqlContext.sql("SELECT R2.writer FROM table R1 JOIN table R2 ON R1.id != R2.id WHERE ARRAY_INTERSECT(R1.writer, R2.writer)[0] is not null ")
但也有例外:
线程“main”中出现异常。未定义的函数:“ARRAY_INTERSECT”。此函数既不是注册的临时函数,也不是在数据库“default”中注册的永久函数。线路1位置80
Spark SQL可能不支持ARRAY_INTERSECTION
和ARRAY_INTERSECT
,我如何在Spark SQL
中实现我的目标?
2条答案
按热度按时间n7taea2i1#
由于Spark 2.4
array_intersect
函数可直接用于SQL和
Dataset
API:一个二个一个一个
其他语言中也存在等效函数:
pyspark.sql.functions.array_intersect
。SparkR::array_intersect
。kwvwclae2#
你需要一个udf:
然后检查交集是否为空: