pyspark - 如何加密 JSON 字段,然后将该字段读回 JSON
问题描述
我能够从包含 JSON 对象的列中检索要加密的字段,一旦我加密了该字段,我想将其读回 JSON。这就是我的数据框的外观:
json: struct
id:string
pii:string
type:string
dataContentType:string
dataSchema:string
time:string
enqueuedTime:date
两列(JSON,EnqueuedTime),所以我希望能够获取 pii 值并对其进行加密,然后将其读回 JSON 列。我们有一个当前的解决方案,将 JSON 扁平化为单独的列,但客户端希望保留原始 JSON 结构。我正在努力寻找一种将加密值读回 JSON 或通过 PySpark 反转 JSON 扁平化的方法。
解决方案
这个最小的独立示例向您展示了如何使用 和自定义 udf 函数加密您的字段pii
:withColumn
withField
import pyspark.sql.functions as F
import pyspark.sql.types as T
structureSchema = T.StructType([
T.StructField('json', T.StructType([
T.StructField('id', T.StringType(), True),
T.StructField('pii', T.StringType(), True),
])),
])
df = spark.createDataFrame([(("123", "some json"),), (("456", "some more json"),)], structureSchema)
df.show()
@udf(returnType=T.StringType())
def encrypt_json(s):
return "Enc: " + s
df_result = df.withColumn("json", F.col("json").withField("pii", encrypt_json(F.col("json.pii"))))
df_result.show()
输出:
+--------------------+
| json|
+--------------------+
| {123, some json}|
|{456, some more j...|
+--------------------+
+--------------------+
| json|
+--------------------+
|{123, Enc: some j...|
|{456, Enc: some m...|
+--------------------+
你当然需要encrypt_json
用你自己的加密函数替换 udf 函数。
推荐阅读
- sql - 连接不同尺寸表的最有效方法是什么?
- naming-conventions - 如何命名第二个元素?
- rest - 如何设计可以使用 REST 端点的服务。需要支持在运行时添加新端点
- javascript - 设置嵌套数组的状态
- google-apps-script - Google Apps 脚本 - 检查表是否存在,如果存在则将其删除,检查删除作业是否完成
- c# - C#:SQL - 一次一个查询与命令文本中的多个查询?
- javascript - 父级重新渲染不更新子道具
- r - ggplot2 用于具有两个相同刻度标签的条形图
- javascript - 服务器和客户端中的类名水合不匹配,(警告:Prop `className` 与服务器和客户端不匹配)
- cassandra - 将 DNS 故障转移用作多 DC 故障转移策略吗?