繁体   English   中英

与pyspark连续多次连接

[英]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文档。 这些是不同的数据结构,并且不以相同的方式操作。

而且看起来你在这里做的事情很奇怪。 假设您有一个父表minmaxsum可以计算为没有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM