在相等和相同的分区中拆分字符串值
Split string values in equal and same partition
我需要将我的数据分成 80 个分区,而不管数据的键是什么,并且每次数据都应该重新运行相同的分区值。是否有任何算法可用于实现相同的算法。
关键是多个字段的组合。
我计划为密钥组合生成一个代理密钥,并使用最小值和最大值将数据拆分为所需数量的分区来应用范围函数。但是,如果同一个密钥明天到达,我必须回头查看以获取代理密钥,以便相同的密钥落在同一个分区上。
是否有任何现有的 algorithm/formula pyspark 函数,我在其中传递一个字符串值,它每次都会 return 一个相同的数字,并确保它平均分配字符串值?
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)
如果您不能使用数字键而只使用 modulus,那么...
对数字字符串值使用稳定散列,例如 python hash() built in 并对其执行 mod 80。它将整齐地分类到 80 个桶中(编号为 0 - 79)。
例如像这样:
bucket = abs(hash(key_string) % 80)
我需要将我的数据分成 80 个分区,而不管数据的键是什么,并且每次数据都应该重新运行相同的分区值。是否有任何算法可用于实现相同的算法。 关键是多个字段的组合。
我计划为密钥组合生成一个代理密钥,并使用最小值和最大值将数据拆分为所需数量的分区来应用范围函数。但是,如果同一个密钥明天到达,我必须回头查看以获取代理密钥,以便相同的密钥落在同一个分区上。
是否有任何现有的 algorithm/formula pyspark 函数,我在其中传递一个字符串值,它每次都会 return 一个相同的数字,并确保它平均分配字符串值?
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)
如果您不能使用数字键而只使用 modulus,那么...
对数字字符串值使用稳定散列,例如 python hash() built in 并对其执行 mod 80。它将整齐地分类到 80 个桶中(编号为 0 - 79)。
例如像这样:
bucket = abs(hash(key_string) % 80)