Я знаю, что эта тема обсуждается справедливо, но мне все еще не совсем ясно, каков самый стандартный способ создания перестановки Dask DataFrame.
Чтобы создать случайный индекс в нераспределенном виде, первое, что кто-то, вероятно, попробует, будет:
df['random_index'] = np.random.permutation(len(df))
Но в контексте Dask len(df)
будетвызвать вычисление.Мне не ясно, имеет ли смысл использовать такое вычисление для определения длины.Вместо этого, я вижу альтернативу, сделать что-то вроде
ds = ds.map(
lambda (col_1, col_2): (
<random_string>, col_1, col_2
)
)
, это будет лениво создавать новый псевдослучайный столбец, который можно использовать как в индексе.Вы видите что-то не так с этим?Я предполагаю, что для создания случайных строк кто-то должен использовать хороший алгоритм хеширования, чтобы обеспечить равномерное распределение ключей.Я думал о чем-то подобном
import hashlib
from random import randint
hashlib.sha1(bytes(randint(1, 1e16))).hexdigest()
, который достаточно быстр и будет производить равномерно распределенные ключи.Дайте мне знать, если я попадаю в какую-либо очевидную ловушку (?)
edit
на самом деле нет причин использовать строку вместо простого целого числа.вам просто нужно убедиться, что вы производите гораздо большие индексы, чем размер вашего набора данных