Python 如何使用Spark SQL创建和执行集合操作?

Python 如何使用Spark SQL创建和执行集合操作?,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我使用Spark SQL创建了一个名为todays\u id和previous\u days\u id的ID数组。我希望能够直接使用Spark SQL将这些ID数组转换为集合,然后计算一列ID和另一列ID之间的差异。到目前为止,我使用了UDF: df=spark.sql(“”) …查询以生成今天和前一天的ID数组列 """) #计算两个集合之间差异大小的udf differencer=udf(lambda x,y:len(set(x)-set(y)),IntegerType() df=df.wi

我使用Spark SQL创建了一个名为
todays\u id
previous\u days\u id
的ID数组。我希望能够直接使用Spark SQL将这些ID数组转换为集合,然后计算一列ID和另一列ID之间的差异。到目前为止,我使用了UDF:

df=spark.sql(“”)
…查询以生成今天和前一天的ID数组列
""")
#计算两个集合之间差异大小的udf
differencer=udf(lambda x,y:len(set(x)-set(y)),IntegerType()
df=df.withColumn('difference',differenticer('todays\u id','previous\u days\u id'))
df.createOrReplaceTempView(“差异”)
然后,我可以在
差异
列中计算一个“新鲜度”分数,即ID相对于前一天每天的变化量


有没有一种方法可以通过Spark SQL实现这一点,而不使用UDF?我在中找不到关于使用集合的任何信息。

size
array\u除了
应等同于您对
len(set(x)-set(y))的操作之外。

import pyspark.sql.functions as F

df2 = df.withColumn('difference', F.size(F.array_except('todays_ids', 'previous_days_ids')))