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



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

df = spark.sql("""
... query to generate today and previous day's ID array columns
""")
# udf that calculates a size of the difference between two sets 
differencer=udf(lambda x,y: len(set(x)-set(y)), IntegerType())
df = df.withColumn('difference', differencer('todays_ids', 'previous_days_ids'))
df.createOrReplaceTempView("differences")

然后我可以取CCD_ 3列;新鲜度";ID相对于前一天每天变化的程度的分数。

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

sizearray_except应该等效于您对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')))

最新更新