如何在hive或sparksql中以array struct的形式为特定列应用sha2?动态

o8x7eapl  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(555)

我在Hive里有数据

id    name       kyc
1001  smith      [pnno:999,ssn:12345,email:ss@mail.com]

当我们选择这些列时,输出将是

1001.smith, [999,12345,ss@mail.com]

我必须在这个数组列中应用sha2,并且输出也应该显示出来

1001,smith,[999,*****(sha2 masked value), ss@gmail.com]

输出应为相同的数组结构格式
我目前正在创建一个单独的视图并加入查询,有没有任何方法可以在hive查询中或在spark/scala内部使用dataframe动态地处理这个问题?
另外,使用spark/scala的任何配置?
谢谢您

fhity93d

fhity93d1#

你可以用 transform 加密 ssn 结构数组中的字段:

// sample dataframe
df.show(false)
+----+-----+---------------------------+
|id  |name |kyc                        |
+----+-----+---------------------------+
|1001|smith|[[999, 12345, ss@mail.com]]|
+----+-----+---------------------------+

// sample schema
df.printSchema
// root
// |-- id: integer (nullable = false)
// |-- name: string (nullable = false)
// |-- kyc: array (nullable = false)
// |    |-- element: struct (containsNull = false)
// |    |    |-- pnno: integer (nullable = false)
// |    |    |-- ssn: integer (nullable = false)
// |    |    |-- email: string (nullable = false)

val df2 = df.withColumn(
    "kyc", 
    expr("""
        transform(kyc, 
            x -> struct(x.pnno pnno, sha2(string(x.ssn), 512) ssn, x.email email)
        )
    """)
)

df2.show(false)
+----+-----+------------------------------------------------------------------------------------------------------------------------------------------------------+
|id  |name |kyc                                                                                                                                                   |
+----+-----+------------------------------------------------------------------------------------------------------------------------------------------------------+
|1001|smith|[[999, 3627909a29c31381a071ec27f7c9ca97726182aed29a7ddd2e54353322cfb30abb9e3a6df2ac2c20fe23436311d678564d0c8d305930575f60e2d3d048184d79, ss@mail.com]]|
+----+-----+------------------------------------------------------------------------------------------------------------------------------------------------------+

相关问题