Разделить строковые значения в одинаковом и одинаковом разделе - PullRequest
0 голосов
/ 08 октября 2019

Мне нужно разделить мои данные на 80 разделов, независимо от того, что является ключом данных, и каждый раз, когда данные должны повторять одно и то же значение раздела. Есть ли какой-нибудь алгоритм, который можно использовать для реализации того же. Ключ является комбинацией нескольких полей.

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

Есть ли какая-либо существующая функция pyspark алгоритма / формулы, где я передаю строковое значение, он будет возвращать одно и то же число каждый раз, и он будет обеспечивать равномерное распределение строкового значения?

df_1=spark.sql("select column_1,column_2,column_2,hash(column_1) % 20 as part from temptable")
df_1.createOrReplaceTempView("test")
spark.sql("select  part,count(*) from test group by part").show(160,False)

1 Ответ

0 голосов
/ 08 октября 2019

Если вы не можете использовать числовую клавишу и просто взять модуль, тогда ...

Используйте стабильный хеш для строкового значения числа, такого как python hash ()встроенный и сделать мод 80 на нем. Он будет аккуратно отсортирован в 80 ведер (пронумерованы от 0 до 79).

например, примерно так:

bucket = abs(hash(key_string) % 80)
...