【发布时间】:2020-03-20 21:30:22
【问题描述】:
我有一个包含以下两列的表格:
Device-Id Account-Id
d1 a1
d2 a1
d1 a2
d2 a3
d3 a4
d3 a5
d4 a6
d1 a4
Device-Id 是安装我的应用的设备的唯一 ID,Account-Id 是用户帐户的 ID。一个用户可以拥有多个设备,并且可以在同一设备上创建多个帐户(例如,d1 设备设置了 a1、a2 和 a3 帐户)。
我想找到唯一的实际用户(应该在生成的表中表示为具有一些唯一 UUID 的新列)并且我正在寻找的转换生成下表:
Unique-User-Id Devices-Used Accounts-Used
uuid1 [d1, d2, d3] [a1, a2, a3, a4, a5]
uuid2 [d4] [a6]
上面生成的表格背后的想法是,实际用户 uuid1 在他们的设备 d1 和 d2 上设置了一个帐户 a1,这实质上意味着这两个设备都属于 uuid 1 并且所有其他帐户都设置在这些设备上d1 和 d2 设备也映射到同一个用户 uuid1。同样,d1 也有一个账户 a4,它也在 d3 上设置,所以 d3 也是 uuid1 的设备,它上面的每个账户都应该映射到 uuid1。
如何在 SQL/Spark/GraphFrames(由 DataBricks 提供)中实现上述转换,其中 Device-Ids 和 Account-Ids 都可以是数百万?
【问题讨论】:
-
查找哪个设备和哪个账号属于哪个用户的逻辑是什么?
-
你的 spark 版本是什么,2.4+ 或更低?每个设备只能有一个所有者(user_id),这是逻辑吗?
-
@pissall 上下文是一个帐户(例如 a1)将只属于一个用户(但反过来不正确,一个用户可能有多个帐户),现在因为可以配置同一个帐户在多个设备上,所有这些设备以及在这些设备上设置的所有帐户都将映射到单个用户(注意:用户!= 帐户)。组合两个设备背后的逻辑是它们应该共享一个在其上设置的公共帐户。
-
@jxc 2.4+;不,实际用户将拥有许多设备(Android、iOS、平板电脑等),并且会在其上注册许多帐户。然而,一个帐户只会指向一个用户,我需要找到唯一的用户。示例:Ben 有两个设备 d1 和 d2,并在这两个设备上分别设置了 a1、a2 和 a2、a3。现在,a1 将对应一个唯一用户,我们称之为 uuid1;我需要一些转换来确定由于 a1 在 d1 上,所以 d1 上的所有帐户也映射到 uuid1,并且由于 a2,作为 uuid1 的帐户也在 d2 上,d2 上的每个帐户也应该映射到 uuid1。
-
@AmanGill,所以我实际上是对的。正如您提到的
all accounts on d1 also maps to uuid1,同一设备上的帐户应属于同一用户(或 uuid),这就是您将 d2 链接到 d1 的方式。
标签: sql apache-spark pyspark spark-graphx graphframes