Apache Spark Parquet加密:如何加密结构体数组?

q3aa0525  于 2022-11-16  发布在  Apache
关注(0)|答案(1)|浏览(187)

从Spark 3.2开始,Parquet就有了这个有趣的功能:Parquet列加密
该文档非常清楚地说明了如何为 Dataframe 模式中的特定列指定使用哪个键,即:
选项(“ parquet .加密.列.密钥”,“密钥A:正方形”)
如果我们要使用KMS系统中的keyA标记所标识的密钥来加密名为square的列。
问题是:如果我的列是一个Struct类型的数组,如何指定列名?
比如说

myDF.printSchema

root
|-- int_column: integer (nullable = false)
|-- square_int_column: double (nullable = false)
|-- more: array (nullable = true)
|    |-- element: struct (containsNull = true)
|    |    |-- name: string (nullable = true)
|    |    |-- description: string (nullable = true)

我如何指定more列的键?或者more.name列的键?支持吗?我在parquet或spark文档中找不到任何关于这个的内容。

brgchamk

brgchamk1#

经过一番研究,
我决定用 parquet 工具来研究一个生成的 parquet 文件,以便了解结构数组在文件中是如何组织的。
因此,在创建了一个具有所需模式的parquet文件后,我用以下命令打开它:

java ~/parquet-tools-1.11.0.jar meta <my-parquet-file-path> | less

检查列的元数据时,我发现:

[...cut...]
more:                               OPTIONAL F:1
.list:                              REPEATED F:1
..element:                          OPTIONAL F:8
...name:                            OPTIONAL BINARY L:STRING R:1 D:4
[...cut...]

因此,要加密该列,我们需要将该列指定为:

squaresDF.write
   .option("parquet.encryption.column.keys" , "keyA:more.list.element.name")

相关问题