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

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

我在Hive里有数据

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

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

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

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

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

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

fhity93d

fhity93d1#

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

  1. // sample dataframe
  2. df.show(false)
  3. +----+-----+---------------------------+
  4. |id |name |kyc |
  5. +----+-----+---------------------------+
  6. |1001|smith|[[999, 12345, ss@mail.com]]|
  7. +----+-----+---------------------------+
  8. // sample schema
  9. df.printSchema
  10. // root
  11. // |-- id: integer (nullable = false)
  12. // |-- name: string (nullable = false)
  13. // |-- kyc: array (nullable = false)
  14. // | |-- element: struct (containsNull = false)
  15. // | | |-- pnno: integer (nullable = false)
  16. // | | |-- ssn: integer (nullable = false)
  17. // | | |-- email: string (nullable = false)
  18. val df2 = df.withColumn(
  19. "kyc",
  20. expr("""
  21. transform(kyc,
  22. x -> struct(x.pnno pnno, sha2(string(x.ssn), 512) ssn, x.email email)
  23. )
  24. """)
  25. )
  26. df2.show(false)
  27. +----+-----+------------------------------------------------------------------------------------------------------------------------------------------------------+
  28. |id |name |kyc |
  29. +----+-----+------------------------------------------------------------------------------------------------------------------------------------------------------+
  30. |1001|smith|[[999, 3627909a29c31381a071ec27f7c9ca97726182aed29a7ddd2e54353322cfb30abb9e3a6df2ac2c20fe23436311d678564d0c8d305930575f60e2d3d048184d79, ss@mail.com]]|
  31. +----+-----+------------------------------------------------------------------------------------------------------------------------------------------------------+
展开查看全部

相关问题