Конечно, вы можете сделать это только с функциями SQL. Имея
df = spark.createDataFrame(["Hello World"], "string")
In Spark 2.4 или более поздней (ранее при использовании некоторых проприетарных платформ), вы можете
df.selectExpr("""aggregate(
sequence(1, 5000), -- Dummy sequence
value, -- Init
(acc, x) -> sha2(acc, 512) -- Aggregation function
) AS hash""")
In Spark 3.1 или позже вы можете
from pyspark.sql.functions import aggregate, col, lit, sequence
df.select(aggregate(
sequence(lit(1), lit(5000)), # Dummy sequence
col("value"), # Init
lambda acc, _: sha2(acc, 512) # Aggregation function
).alias("hash"))
Редактировать (если вы не можете обновить):
На практике 5000 раундов хеширования, вероятно, более чем компенсируют стоимость перемещения данных, поэтому у вас должно быть все в порядке с простым udf
, особенно для прототипирования.