我正在使用 Python 在 Databricks 中开发一个数据安全项目,我需要对 DataFrame 中的某些列进行加密,同时确保加密的列保留其原始数据类型。我已阅读下面的文章,但正在努力寻找一种在加密后保留数据类型完整性的解决方案。
https://medium.com/@datamadness/column-encryption-and-decryption-in-databricks-baf9ada3a7cf
任何关于如何实现这一目标的见解或代码示例(不使用 UDF)将不胜感激。谢谢!
如果我们可以生成一个
StringType
和一个 DecimalType
列,那么所有其他数据类型都可以从它们派生出来:
df = spark.sql("""
SELECT
cast(conv(hex(aes_encrypt('Spark', 'abcdefghijklmnop', 'ECB')), 16, 10) as decimal(38, 0)) numeric_column,
hex(aes_encrypt('Spark', 'abcdefghijklmnop', 'ECB')) string_column
""")
df.printSchema()
df.show(truncate= False)
输出为:
root
|-- numeric_column: decimal(38,0) (nullable = true)
|-- string_column: string (nullable = true)
+--------------------+--------------------------------+
|numeric_column |string_column |
+--------------------+--------------------------------+
|18446744073709551615|E07BF450A0B1EA77D4780A0F668D73FB|
+--------------------+--------------------------------+