多个连续加入pyspark


问题内容

我正在尝试将多个DF一起加入。因为联接是如何工作的,所以我得到了重复的相同列名。

在(K,V)和(K,W)类型的数据集上调用时,返回(K,(V,W))对的数据集,其中每个键都有所有成对的元素。

# Join Min and Max to S1
joinned_s1 = (minTime.join(maxTime, minTime["UserId"] == maxTime["UserId"]))

# Join S1 and sum to s2
joinned_s2 = (joinned_s1.join(sumTime, joinned_s1["UserId"] == sumTime["UserId"]))

我收到此错误:“”参考’UserId’不明确,可能是:UserId#1578,UserId#3014。“

成功加入后,从数据集中删除W的正确方法是什么?


问题答案:

您可以使用等参:

 minTime.join(maxTime, ["UserId"]).join(sumTime, ["UserId"])

别名:

minTime.alias("minTime").join(
    maxTime.alias("maxTime"), 
    col("minTime.UserId") == col("maxTime.UserId")
)

或引用父表:

(minTime
  .join(maxTime, minTime["UserId"] == maxTime["UserId"])
  .join(sumTime, minTime["UserId"] == sumTime["UserId"]))

另外,您引用的是RDD文档,而不是文档DataFrame。这些是不同的数据结构,并且操作方式不同。

而且看起来您在这里做的事情很奇怪。假设您有一个父表minmax并且sum可以将其计算为简单的聚合而没有join