python 如何在pyspark DataFrame上下文中调用aes_encrypt(和其他Spark SQL函数)

xn1cxnb4  于 2024-01-05  发布在  Python
关注(0)|答案(2)|浏览(155)

我需要在DataFrame上下文中调用新的Spark函数aes_encrypt
该函数可以在SQL上下文中调用,如下所示:

  1. SELECT *, aes_encrypt(col1, key, 'GCM') AS col1_encrypted FROM myTable

字符串
或者像这样:

  1. df = sql("SELECT *, aes_encrypt(col1, key, 'GCM') AS col1_encrypted FROM myTable")


在DataFrame上下文中是否有其他方法调用它,类似这样?

  1. from pyspark.sql.functions import aes_encrypt
  2. df = table("myTable").withColumn("col1_encrypted", aes_encrypt("col1", key, 'GCM')


(我知道它不能被导入,因为它存在于pyspark中,这只是可以调用的其他Spark函数的一个例子)

lh80um4z

lh80um4z1#

你可以使用expr函数(doc)来实现-只需传递相应的SQL表达式:

  1. df = table("myTable") \
  2. .withColumn("col1_encrypted", expr("aes_encrypt(col1, key, 'GCM')"))

字符串
selectExpr(doc):

  1. df = table("myTable") \
  2. .selectExpr("*", "aes_encrypt(col1, key, 'GCM') as col1_encrypted")

im9ewurl

im9ewurl2#

  1. data = [(
  2. "João",25,"Masculino",
  3. ), (
  4. "Maria",20,"Feminino",
  5. ), (
  6. "Pedro",30,"Masculino",
  7. )]
  8. df = spark.createDataFrame(data, schema=["nome", "idade", "sexo"])
  9. df.show()
  10. encryption_key = 'key'
  11. jujuba = df.withColumn(
  12. 'teste_encryption', expr(f"base64(aes_encrypt(nome, '{encryption_key}', 'ECB'))")
  13. ).withColumn(
  14. 'teste_descryption', expr(f"aes_decrypt(unbase64(teste_encryption), '{encryption_key}', 'ECB')").cast(StringType())
  15. )

字符串

展开查看全部

相关问题