【发布时间】:2021-10-01 15:56:07
【问题描述】:
我正在寻找一种方法来加入 2 个数据帧,但随机行与键匹配。这个奇怪的请求是由于生成位置的计算非常长。 我想在 pyspark 中做一种“随机左连接”。
我有一个带有areaID(字符串)和count(整数)的数据框。 areaID 是独一无二的(大约 7k)。
+--------+-------+
| areaID | count |
+--------+-------+
| A | 10 |
| B | 30 |
| C | 1 |
| D | 25 |
| E | 18 |
+--------+-------+
我有第二个数据框,每个 areaID 有大约 1000 个预计算行,有 2 个位置列 x(浮点数)和 y(浮点数)。这个数据框大约有 700 万行。
+--------+------+------+
| areaID | x | y |
+--------+------+------+
| A | 0.0 | 0 |
| A | 0.1 | 0.7 |
| A | 0.3 | 1 |
| A | 0.1 | 0.3 |
| ... | | |
| E | 3.15 | 4.17 |
| E | 3.14 | 4.22 |
+--------+------+------+
我想以如下数据框结束:
+--------+------+------+
| areaID | x | y |
+--------+------+------+
| A | 0.1 | 0.32 | < row 1/10 - randomly picked where areaID are the same
| A | 0.0 | 0.18 | < row 2/10
| A | 0.09 | 0.22 | < row 3/10
| ... | | |
| E | 3.14 | 4.22 | < row 1/18
| ... | | |
+--------+------+------+
我的第一个想法是遍历第一个数据帧的每个areaID,通过areaID 过滤第二个数据帧,并对该数据帧的count 行进行采样。问题是这在 7k 加载/过滤/采样过程中非常缓慢。
第二种方法是在areaID 上进行外部 连接,然后打乱数据帧(但看起来很复杂),应用等级并在rank count 时保持但我不喜欢加载大量数据以供事后过滤的方法。
我想知道是否有办法使用“随机”left join 来做到这一点?在这种情况下,我会将每一行复制count 次并应用它。
非常感谢,
尼古拉斯
【问题讨论】:
标签: pyspark