У меня возникла проблема при преобразовании шестнадцатеричного числа в десятичное (узнано здесь) в pyspark.
from pyspark.sql.functions import col, sha2, conv, substring
# User data with ZIPs
user_data = [
("100052441000101", "21001"),
("100052441000102", "21002"),
("100052441000103", "21002"),
("user1", "21001"),
("user2", "21002")
]
df_users = spark.createDataFrame(user_data, ["user_id", "ZIP"])
# Generate SHA-256 hash from the user_id
df_users = df_users.withColumn("hash_key", sha2(col("user_id"), 256))
# Convert the hexadecimal hash (sha2 output) to decimal
df_users = df_users.withColumn("hash_substr1", substring(col('hash_key'), 1, 16))
df_users = df_users.withColumn("hash_substr2", substring(col('hash_key'), 1, 15))
df_users = df_users.withColumn("hash_int1", conv(col('hash_substr1'), 16, 10).cast("bigint"))
df_users = df_users.withColumn("hash_int2", conv(col('hash_substr2'), 16, 10).cast("bigint"))
df_users.show()
Я получаю следующий результат:
+---------------+-----+--------------------+----------------+---------------+-------------------+-------------------+
| user_id| ZIP| hash_key| hash_substr1| hash_substr2| hash_int1| hash_int2|
+---------------+-----+--------------------+----------------+---------------+-------------------+-------------------+
|100052441000101|21001|3cf4b90397964f6b2...|3cf4b90397964f6b|3cf4b90397964f6|4392338961672327019| 274521185104520438|
|100052441000102|21002|e18aec7bb2a60b62d...|e18aec7bb2a60b62|e18aec7bb2a60b6| null|1015753888833888438|
|100052441000103|21002|e55127f9f61bbe433...|e55127f9f61bbe43|e55127f9f61bbe4| null|1032752028895525860|
| user1|21001|0a041b9462caa4a31...|0a041b9462caa4a3|0a041b9462caa4a| 721732164412679331| 45108260275792458|
| user2|21002|6025d18fe48abd451...|6025d18fe48abd45|6025d18fe48abd4|6928174017724202309| 433010876107762644|
+---------------+-----+--------------------+----------------+---------------+-------------------+-------------------+
Обратите внимание, что hash_int1 имеет значение null для 2-й и 3-й записей.
Однако, когда я пытаюсь получить соответствующий int с помощью Python, я получаю некоторые значение:
hexes = ["e18aec7bb2a60b62", "e18aec7bb2a60b6", "e55127f9f61bbe43", "e55127f9f61bbe4"]
[int(h, 16) for h in hexes]
[16252062221342215010, 1015753888833888438, 16524032462328413763, 1032752028895525860]
Значения одинаковы, если они не равны нулю.
Конечная цель — генерировать воспроизводимые случайные значения
df_users = df_users.withColumn("random_value", (col("hash_int1") % 10**12) / 10**12)
Подробнее здесь: https://stackoverflow.com/questions/793 ... to-decimal
Pyspark — проблема при преобразовании шестнадцатеричного числа в десятичное ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Pyspark — проблема при преобразовании шестнадцатеричного числа в десятичное
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Преобразование шестнадцатеричного в десятичное значение (напишите оба в файл)
Anonymous » » в форуме C++ - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-