如何以加密格式保存 spark 数据集?
How to save spark dataset in encrypted format?
我正在将我的 spark 数据集保存为本地计算机中的 parquet 文件。我想知道是否有任何方法可以使用某种加密算法对数据进行加密。我用来将数据保存为 parquet 文件的代码如下所示。
dataset.write().mode("overwrite").parquet(parquetFile);
我看到 similar question 但我的查询与写入本地磁盘不同。
我不认为你可以直接在 Spark 上做,但是你可以在特殊的 Apache Arrow 中围绕 Parquet 放置其他项目。我想这个视频解释了如何做:
https://databricks.com/session_na21/data-security-at-scale-through-spark-and-parquet-encryption
更新:从 Spark 3.2.0 开始,这似乎是可能的。
从 Spark 3.2 开始,Parquet 表支持列加密。
例如:
hadoopConfiguration.set("parquet.encryption.kms.client.class" ,
"org.apache.parquet.crypto.keytools.mocks.InMemoryKMS");
// Explicit master keys (base64 encoded) - required only for mock InMemoryKMS
hadoopConfiguration.set("parquet.encryption.key.list" ,
"keyA:AAECAwQFBgcICQoLDA0ODw== , keyB:AAECAAECAAECAAECAAECAA==");
// Activate Parquet encryption, driven by Hadoop properties
hadoopConfiguration.set("parquet.crypto.factory.class" ,
"org.apache.parquet.crypto.keytools.PropertiesDrivenCryptoFactory");
// Write encrypted dataframe files.
// Column "square" will be protected with master key "keyA".
// Parquet file footers will be protected with master key "keyB"
squaresDF.write().
option("parquet.encryption.column.keys" , "keyA:square").
option("parquet.encryption.footer.key" , "keyB").
parquet("/path/to/table.parquet.encrypted");
// Read encrypted dataframe files
Dataset<Row> df2 = spark.read().parquet("/path/to/table.parquet.encrypted");
这基于以下中的用法示例:
https://spark.apache.org/docs/3.2.0/sql-data-sources-parquet.html#columnar-encryption
我正在将我的 spark 数据集保存为本地计算机中的 parquet 文件。我想知道是否有任何方法可以使用某种加密算法对数据进行加密。我用来将数据保存为 parquet 文件的代码如下所示。
dataset.write().mode("overwrite").parquet(parquetFile);
我看到 similar question 但我的查询与写入本地磁盘不同。
我不认为你可以直接在 Spark 上做,但是你可以在特殊的 Apache Arrow 中围绕 Parquet 放置其他项目。我想这个视频解释了如何做:
https://databricks.com/session_na21/data-security-at-scale-through-spark-and-parquet-encryption
更新:从 Spark 3.2.0 开始,这似乎是可能的。
从 Spark 3.2 开始,Parquet 表支持列加密。
例如:
hadoopConfiguration.set("parquet.encryption.kms.client.class" ,
"org.apache.parquet.crypto.keytools.mocks.InMemoryKMS");
// Explicit master keys (base64 encoded) - required only for mock InMemoryKMS
hadoopConfiguration.set("parquet.encryption.key.list" ,
"keyA:AAECAwQFBgcICQoLDA0ODw== , keyB:AAECAAECAAECAAECAAECAA==");
// Activate Parquet encryption, driven by Hadoop properties
hadoopConfiguration.set("parquet.crypto.factory.class" ,
"org.apache.parquet.crypto.keytools.PropertiesDrivenCryptoFactory");
// Write encrypted dataframe files.
// Column "square" will be protected with master key "keyA".
// Parquet file footers will be protected with master key "keyB"
squaresDF.write().
option("parquet.encryption.column.keys" , "keyA:square").
option("parquet.encryption.footer.key" , "keyB").
parquet("/path/to/table.parquet.encrypted");
// Read encrypted dataframe files
Dataset<Row> df2 = spark.read().parquet("/path/to/table.parquet.encrypted");
这基于以下中的用法示例: https://spark.apache.org/docs/3.2.0/sql-data-sources-parquet.html#columnar-encryption