У меня есть фрейм данных pyspark, подобный следующему:
+--------+--------+-----------+
| col1 | col2 | groupId |
+--------+--------+-----------+
| val11 | val21 | 0 |
| val12 | val22 | 1 |
| val13 | val23 | 2 |
| val14 | val24 | 0 |
| val15 | val25 | 1 |
| val16 | val26 | 1 |
+--------+--------+-----------+
Каждая строка имеет groupId
, и несколько строк могут иметь одинаковые groupId
.
Я хочу случайным образом разделить эти данные на два набора данных. Но все данные, имеющие определенный groupId
, должны быть в одном из разделений.
Это означает, что если d1.groupId = d2.groupId
, то d1
и d2
находятся в одном и том же разбиении.
Например:
# Split 1:
+--------+--------+-----------+
| col1 | col2 | groupId |
+--------+--------+-----------+
| val11 | val21 | 0 |
| val13 | val23 | 2 |
| val14 | val24 | 0 |
+--------+--------+-----------+
# Split 2:
+--------+--------+-----------+
| col1 | col2 | groupId |
+--------+--------+-----------+
| val12 | val22 | 1 |
| val15 | val25 | 1 |
| val16 | val26 | 1 |
+--------+--------+-----------+
Какой хороший способ сделать это на PySpark? Можно ли как-нибудь использовать метод randomSplit
?