多个连续加入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
。这些是不同的数据结构,并且操作方式不同。
而且看起来您在这里做的事情很奇怪。假设您有一个父表min
,max
并且sum
可以将其计算为简单的聚合而没有join
。