[英]Multiple consecutive join with 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后,从数据集中删除W的正确方法是什么?
您可以使用equi-join:
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
简单聚合。
如果在列上连接两个数据框,则列将被复制。 因此,尝试使用数组或字符串来连接两个或多个数据帧。
例如,如果加入列:
df = left.join(right, left.name == right.name)
输出将包含两列“name”。
现在,如果您使用:
df = left.join(right, "name") OR df=left.join(right,["name"])
然后输出将没有重复的列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.