使用pysp的多个连续联接

2024-06-11 18:45:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想加入多个DF。因为join是如何工作的,所以我得到了相同的列名。

When called on datasets of type (K, V) and (K, W), returns a dataset of (K, (V, W)) pairs with all pairs of elements for each key.

# 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的正确方法是什么?


Tags: andoftodfjoinuserids2pairs
2条回答

您可以使用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文档。这些是不同的数据结构,操作方式不同。

而且看起来你在做一些奇怪的事情。假设您有一个单亲表minmaxsum可以作为简单的聚合计算,而不需要join

如果在列上连接两个数据帧,则列将被复制。因此,尝试使用数组或字符串连接两个或多个数据帧。

例如,如果在列上联接:

df = left.join(right, left.name == right.name)

输出将由两列“name”组成。

现在,如果您使用:

df = left.join(right, "name") OR df=left.join(right,["name"])

则输出将没有重复的列。

相关问题 更多 >