Я работаю над проблемой небольшого набора данных. Новые данные собираются сверхурочно, и я хотел бы добавить эти новые данные в свой набор данных. Я создал уникальный идентификатор в моем текущем наборе данных и использовал randomSplit, чтобы разделить его на набор для обучения и тестирования:

train, test = unique_lifetimes_spark_df.select("lifetime_id").distinct().randomSplit(weights=[0.8, 0.2], seed=42)

Если я сейчас обновлю свой набор данных и повторно запущу разбиение, получится ли стабильное разбиение, только расширяющее существующие группы, или я рискую «загрязнить» свои группы?

В качестве примера рассмотрим набор данных [A, B, C, D, E]. randomSplit делит это на две группы:

Группа 1: [A, B, C, D]

Группа 2: [E]

В какой-то момент я получаю обновленный набор данных [A, B, C, D, E, F, G], который хотел бы включить в свой процесс моделирования. Используя randomSplit, я гарантирую , что в возвращаемом разбиении никогда не будет [A, B, C, D], которое первоначально появилось в группе 1 в группе 2, и наоборот [E] никогда не появится в группе 1, как это было изначально во 2 группе?

Таким образом, обновленное разбиение должно случайным образом решать, куда поместить [F, G], а остальные должны оставаться в ранее назначенных группах.

0
Aesir 24 Ноя 2021 в 14:09

1 ответ

Лучший ответ

Нет, у вас нет гарантии, что если исходный набор данных вырастет, разделение останется таким же для уже существующих элементов.

Можете проверить сами:

scala> spark.range(5).randomSplit(Array(0.8, 0.2), seed=42).foreach(_.show)
+---+
| id|
+---+
|  1|
|  2|
+---+

+---+
| id|
+---+
|  0|
|  3|
|  4|
+---+


scala> spark.range(6).randomSplit(Array(0.8, 0.2), seed=42).foreach(_.show)
+---+
| id|
+---+
|  0|
|  1|
|  2|
|  3|
|  4|
+---+

+---+
| id|
+---+
|  5|
+---+
2
Oli 24 Ноя 2021 в 14:24