如何在pyspark中将GUID转换为整数

Posted

技术标签:

【中文标题】如何在pyspark中将GUID转换为整数【英文标题】:How to convert GUID into integer in pyspark 【发布时间】:2021-08-04 18:46:16 【问题描述】:

你好 *** 家族:

我是 pyspark 的新手,正在努力学习。但现在,我想在 pysprak 中将 GUID 转换为整数。我目前可以在 SQL 中运行以下语句来将 GUID 转换为 int。

CHECKSUM(HASHBYTES('sha2_512',GUID)) AS int_value_wanted

我想在 pyspark 中做同样的事情,并尝试用 spark 数据框创建一个临时表,并在 sql 查询中添加上述语句。但是代码不断抛出“未定义的函数:'CHECKSUM'”。有没有办法可以将“CHECKSUM”函数添加到 pyspark 中或使用另一种 pyspark 方式做同样的事情?

from awsglue.context import GlueContext
from pyspark.sql import SQLContext

glueContext = GlueContext(SparkContext.getOrCreate())
spark_session = glueContext.spark_session
sqlContext = SQLContext(spark_session.sparkContext, spark_session)

spark_df =  spark.createDataFrame(
    [("2540f487-7a29-400a-98a0-c03902e67f73", "1386172469"),
    ("0b32389a-ce01-4e6a-855c-15940cc91e9e", "-2013240275")],
    ("GUDI","int_value_wanted")
)

spark_df.show(truncate=False)
spark_df.registerTempTable('temp')
new_df = sqlContext.sql("SELECT .*, CHECKSUM(HASHBYTES('sha2_512', GUDI)) AS detail_id FROM temp")
new_df.show(truncate=False)
+------------------------------------+----------------+
|GUDI                                |int_value_wanted|
+------------------------------------+----------------+
|2540f487-7a29-400a-98a0-c03902e67f73|1386172469      |
|0b32389a-ce01-4e6a-855c-15940cc91e9e|-2013240275     |
+------------------------------------+----------------+

谢谢

【问题讨论】:

【参考方案1】:

有一个sha2 内置函数,它将SHA-2 系列的校验和作为十六进制字符串返回。也支持 SHA-512。

【讨论】:

感谢您的及时回复...实际上是将字符串转换为二进制。我真正想要的是将这些二进制文件转换回 int 或 str。以SELECT sha2('Spark', 256); will give "529bc3b07127ecb7e53a4dcf1991d9152c24537d919178022b2c42657f79a26b" and I want to convert this binary back to "Spark" as a str value 为例

以上是关于如何在pyspark中将GUID转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyspark中将字符串列转换为ArrayType

如何在 pyspark 中将 DenseMatrix 转换为 spark DataFrame?

如何在 JPA Hibernate 映射中将 GUID(不是 PK)添加到已经具有 PK(整数)的现有实体

如何在pyspark中将列转换为行?

如何在pyspark中将字符串值转换为arrayType

如何在 Pyspark 中将 ArrayType 的列转换为 Dictionary