es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo modificar una columna anidada de tipo struct en un dataframe de pyspark

Estoy tratando de anonimizar/hash una columna anidada, pero no he tenido éxito. El esquema se ve algo así:

-- abc: struct (nullable = true)
|    |-- xyz: struct (nullable = true)
|    |    |-- abc123: string (nullable = true)
|    |    |-- services: struct (nullable = true)
|    |    |    |-- service: array (nullable = true)
|    |    |    |    |-- element: struct (containsNull = true)
|    |    |    |    |    |-- type: string (nullable = true)
|    |    |    |    |    |-- subtype: string (nullable = true)

Necesito cambiar (anonimizar/hashear) el valor de la columna type.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para anonimizar/cifrar los valores en la columna type de la columna services, puedes utilizar la función hash en PySpark. Aquí tienes un ejemplo de código que muestra cómo hacerlo:

    from pyspark.sql.functions import hash
    
    # Suponiendo que tu DataFrame se llama 'df'
    df = df.withColumn("services", 
        struct(
            "services.service".alias("service").cast("array<><type:string, subtype:string="">>").transform(
                lambda x: array(
                    [
                        struct(
                            hash(col("type")).alias("type"),
                            col("subtype")
                        )
                        for col in x
                    ]
                )
            )
        )
    )
    

    En este fragmento de código, utilizamos la función withColumn para transformar la columna services. Primero, aliasamos la columna services.service como service y la convertimos en un array de structs con las columnas type y subtype. Luego, utilizamos la función transform para aplicar una función lambda que itera sobre cada elemento en el array service y reemplaza la columna type con el resultado de aplicarle la función hash. Por último, utilizamos la función struct para convertir el array service de nuevo en una columna struct y se lo asignamos de nuevo a la columna services.

    Ten en cuenta que la función hash no es reversible y no puedes recuperar los valores originales a partir de los valores cifrados. Si necesitas preservar los valores originales, es posible que quieras considerar utilizar una función de cifrado reversible en lugar de una función de hash.</type:string,>

Comments are closed.