Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用AWS KMS加密Pandas/Spark dataframe中的列

如何使用AWS KMS加密Pandas/Spark dataframe中的列
EN

Stack Overflow用户
提问于 2019-06-03 13:37:38
回答 1查看 2.4K关注 0票数 5

我想要加密我的Pandas (或py/spark)数据帧中一列中的值,例如,获取以下数据帧中的列mobno,对其进行加密并将结果放入encrypted_value列中:

我要使用AWS KMS加密密钥。我的问题是:实现这一目标最优雅的方式是什么?

我正在考虑使用UDF,它将调用boto3的KMS客户端。类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@udf
def encrypt(plaintext):
  response = kms_client.encrypt(
    KeyId=aws_kms_key_id,
    Plaintext=plaintext
  )
  ciphertext = response['CiphertextBlob']
  return ciphertext

然后在整个列上应用该udf。

但我不太相信这是正确的方式。这源于这样一个事实:我是一个加密新手--首先,我甚至不知道这个kms_client_encrypt函数是用于加密值(来自列)还是用于操作密钥。也许更好的方法是获得密钥,然后使用一些python加密库(比如hashlib)。

我希望对加密过程有一些澄清,并建议列加密的最佳方法是什么。

EN

回答 1

Stack Overflow用户

发布于 2020-09-22 20:29:41

为了避免在UDF中多次调用KMS服务,请改用AWS Secrets Manager来检索加密密钥,并使用pycrypto来加密列。以下是工作原理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pyspark.sql.functions import udf, col
from Crypto.Cipher import AES

region_name = "eu-west-1"
session = boto3.session.Session()
client = session.client(service_name='secretsmanager', region_name=region_name)
get_secret_value_response = client.get_secret_value(SecretId=secret_name)
secret_key = json.loads(get_secret_value_response['SecretString'])
clear_text_column = 'mobo'

def encrypt(key, text):
    obj = AES.new(key, AES.MODE_CFB, 'This is an IV456')
    return obj.encrypt(text)

def udf_encrypt(key):
    return udf(lambda text: encrypt(key, text))

df.withColumn("encrypted", udf_encrypt(secret_key)(col(clear_text_column))).show()

或者,使用@Vektor88建议的更高效的Pandas UDF (PySpark 3语法):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from functools import partial

encrypt_with_key = partial(encrypt, secret_key)

@pandas_udf(BinaryType())
def pandas_udf_encrypt(clear_strings: pd.Series) -> pd.Series:
    return clear_strings.apply(encrypt_with_key)

df.withColumn('encrypted', pandas_udf_encrypt(clear_text_column)).show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56428549

复制
相关文章
pandas和spark的dataframe互转
由于pandas的方式是单机版的,即toPandas()的方式是单机版的,所以参考breeze_lsw改成分布式版本:
机器学习和大数据挖掘
2019/07/01
2.9K0
pandas dataframe 新增单列和多列
dataframe assign方法,返回一个新对象(副本),不影响旧dataframe对象
lovelife110
2021/01/14
4.3K0
pandas中的 fillna使用(pandas.DataFrame.fillna)「建议收藏」
3、将“A”、“B”、“C”和“D”列中的所有 NaN 元素分别替换为 0、1、2 和 3。
全栈程序员站长
2022/09/22
3.5K0
pandas中的 fillna使用(pandas.DataFrame.fillna)「建议收藏」
Pandas DataFrame显示行和列的数据不全
pd.set_option('display.max_columns', None)
用户7886150
2020/12/26
6.7K0
Python+Pandas逐行处理DataFrame中的某列数据(无循环)
创建一个包含10行6列随机数的DataFrame,行标签从大写字母A开始,列标签从小写字母u开始。然后从上向下遍历,如果某行u列的值比上一行u列的值大,就把该行x列的值改为上一行x列的值加1,否则保持原来的值不变。
Python小屋屋主
2023/08/29
4350
Python+Pandas逐行处理DataFrame中的某列数据(无循环)
Pandas 如何创建 DataFrame
我们已经知道了什么是 Series,在使用 Series 之前,我们得知道如何创建 Series。
用户7886150
2020/12/26
1.6K0
从DataFrame中删除列
在操作数据的时候,DataFrame对象中删除一个或多个列是常见的操作,并且实现方法较多,然而这中间有很多细节值得关注。
老齐
2021/03/29
7K0
pandas按行按列遍历Dataframe的几种方式
iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。 itertuples(): 按行遍历,将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率高。 iteritems():按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问。 示例数据
kirin
2021/04/30
7.1K0
(六)Python:Pandas中的DataFrame
        DataFrame与Series相比,除了可以每一个键对应许多值之外,还增加了列索引(columns)这一内容,具体内容如下所示:
小点点
2022/12/12
3.9K0
如何在 Pandas DataFrame中重命名列?
分析人员重命名列名称的动机之一是确保这些列名称是有效的Python属性名称。这意味着列名称不能以数字开头,而是带下画线的小写字母数字。好的列名称还应该是描述性的,言简意赅,并且不应与现有的DataFrame或Series属性冲突。
五分钟学大数据
2022/10/05
5.6K0
如何在 Pandas DataFrame中重命名列?
使用Pandas melt()重塑DataFrame
重塑 DataFrame 是数据科学中一项重要且必不可少的技能。在本文中,我们将探讨 Pandas Melt() 以及如何使用它进行数据处理。
deephub
2022/01/21
3K0
使用Pandas melt()重塑DataFrame
pandas中关于DataFrame行,列显示不完全(省略)的解决办法[通俗易懂]
有时候DataFrame中的行列数量太多,print打印出来会显示不完全。就像下图这样:
全栈程序员站长
2022/09/14
9.3K0
pandas中关于DataFrame行,列显示不完全(省略)的解决办法[通俗易懂]
如何遍历pandas当中dataframe的行
现在需要遍历上面DataFrame的行。对于每一行,都希望能够通过列名访问对应的元素(单元格中的值)。也就是说,需要类似如下的功能:
马哥Python
2019/06/27
4K0
数据分析-如何重命名Pandas DataFrame中的列名?
DataFrames和Series是用于数据存储的pandas中的两个主要对象类型:DataFrame就像一个表,表的每一列都称为Series。您通常会选择一个系列来分析或操纵它。今天我们将学习如何重命名Pandas DataFrame中的列名。
XXXX-user
2019/08/20
7.7K0
数据分析-如何重命名Pandas DataFrame中的列名?
Spark DataFrame
DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表。SchemaRDD作为Apache Spark 1.0版本中的实验性工作,它在Apache Spark 1.3版本中被命名为DataFrame。对于熟悉Python pandas DataFrame或者R DataFrame的读者,Spark DataFrame是一个近似的概念,即允许用户轻松地使用结构化数据(如数据表)。
week
2018/12/07
9180
在pandas中遍历DataFrame行
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
用户7886150
2020/12/26
3.2K0
pandas | 如何在DataFrame中通过索引高效获取数据?
上篇文章当中我们简单介绍了一下DataFrame这个数据结构的一些常见的用法,从整体上大概了解了一下这个数据结构。今天这一篇我们将会深入其中索引相关的应用方法,了解一下DataFrame的索引机制和使用方法。
TechFlow-承志
2020/07/10
13.6K0
pandas | 如何在DataFrame中通过索引高效获取数据?
Pandas 修改单列,多列,Dataframe 数据类型方法汇总
文章目录 1.修改单列的数据类型 2.修改指定多列的数据类型 3.创建dataframe时,修改数据类型 4.读取时,修改数据类型 5.自动 1.修改单列的数据类型 import pandas as pd import numpy as np df = pd.read_csv('test.csv') df['column_name'] = df['column_name'].astype(np.str) print(df.dtypes) 2.修改指定多列的数据类型 import pandas as
白墨石
2021/01/13
6.7K0
pandas | DataFrame中的排序与汇总方法
今天是pandas数据处理专题的第六篇文章,我们来聊聊DataFrame的排序与汇总运算。
TechFlow-承志
2020/08/04
4.7K0
pandas | DataFrame中的排序与汇总方法
点击加载更多

相似问题

来自Spark / Dataframes的AWS SSE-KMS加密

13

如何在列级别使用AWS KMS加密AWS RDS中的数据?

32

AWS KMS是否使用信封加密?

323

使用AWS KMS加密多个元素

12

aws cli:使用powershell的aws kms加密/解密

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文