【问题标题】:How do I create and perform set operations using Spark SQL?如何使用 Spark SQL 创建和执行集合操作?
【发布时间】:2021-05-15 16:16:25
【问题描述】:

我使用 Spark SQL 创建了一个名为 todays_idsprevious_days_ids 的 ID 数组。我希望能够直接使用 Spark SQL 将这些 ID 数组转换为集合,然后计算一列 ID 与另一列 ID 之间的差异。到目前为止,我使用了一个 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")

然后,我可以获取 difference 列并计算 ID 每天相对于前一天的变化量的“新鲜度”分数。

有没有一种方法可以通过 Spark SQL 来完成,而不是使用 UDF?我在Spark SQL documentation 中找不到关于使用集合的任何内容。

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql


    【解决方案1】:

    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')))
    

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多