我正在尝试将多个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的正确方法是什么?
答案 0 :(得分:5)
您可以使用equi-join:
publicDatabase.fetchAllSubscriptionsWithCompletionHandler { (subscriptions: [CKSubscription]?, error: NSError?) in
if error != nil
{
print("-> cloudKitSubscribeToChat - fetch subscription error")
}
else
{
print("-> cloudKitSubscribeToChat - fetch subscription no error")
if subscriptions?.count == 0
{
print("-> cloudKitSubscribeToChat - subscription count = 0, create")
subscribe()
}
else
{
print("-> cloudKitSubscribeToChat - subscription count > 0, create")
var exists = false
for subscription in subscriptions!
{
if subscription.predicate == predicate
{
print("-> cloudKitSubscribeToChat - subscription count > 0, true")
exists = true
}
else
{
print("-> cloudKitSubscribeToChat - subscription count > 0, false")
exists = false
}
}
if exists == false
{
print("-> cloudKitSubscribeToChat - subscription do not exists, create")
subscribe()
}
else
{
print("-> cloudKitSubscribeToChat - subscription already exists")
result(error: nil)
}
}
}
}
别名:
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
的简单聚合。
答案 1 :(得分:0)
如果在列上连接两个数据框,则这些列将重复。因此,请尝试使用数组或字符串来连接两个或多个数据帧。
例如,如果在列上联接:
df = left.join(right, left.name == right.name)
输出将包含两列带有“名称”的列。
现在,如果您使用:
df = left.join(right, "name") OR df=left.join(right,["name"])
然后输出将没有重复的列。