Pyspark — проблема при преобразовании шестнадцатеричного числа в десятичноеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pyspark — проблема при преобразовании шестнадцатеричного числа в десятичное

Сообщение Anonymous »

У меня возникла проблема при преобразовании шестнадцатеричного числа в десятичное в 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"))

# Show the DataFrame with the generated random values
df_users.show()
Я получаю следующий результат:
+---------------+----- +----+--------------------------------+----------- ----+-------------------+-------------------+
| идентификатор_пользователя | Почтовый индекс| хэш_ключ| хеш_субстр1 | хеш_субстр2 | хеш_int1| hash_int2|
+---------------+-----+--------------------+ ----------------+---------------+----------------- --+-------------------+
|100052441000101|21001|3cf4b90397964f6b2...|3cf4b90397964f6b|3cf4b90397964f6|4392338961672327019| 274521185104520438|
|100052441000102|21002|e18aec7bb2a60b62d...|e18aec7bb2a60b62|e18aec7bb2a60b6| null|1015753888833888438|
|100052441000103|21002|e55127f9f61bbe433...|e55127f9f61bbe43|e55127f9f61bbe4| ноль|1032752028895525860|
| user1|21001|0a041b9462caa4a31...|0a041b9462caa4a3|0a041b9462caa4a| 721732164412679331| 45108260275792458|
| user2|21002|6025d18fe48abd451...|6025d18fe48abd45|6025d18fe48abd4|6928174017724202309| 433010876107762644|
+---------------+-----+--------------------+ ----------------+---------------+----------------- --+-------------------+
Обратите внимание, что hash_int1 имеет значение null для 2-го и 3-й записей.
Однако, когда я пытаюсь получить соответствующее целое число с помощью Python, я получаю некоторое значение:

Код: Выделить всё

hexes = ["e18aec7bb2a60b62", "e18aec7bb2a60b6", "e55127f9f61bbe43", "e55127f9f61bbe4"]
[int(h, 16) for h in hexes]

[16252062221342215010, 1015753888833888438, 16524032462328413763, 1032752028895525860]
Значения одинаковы, если они не равны нулю.

Подробнее здесь: https://stackoverflow.com/questions/793 ... to-decimal
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»