Filtrar valores de matriz utilizando pyspark

Soy nuevo en pyspark y necesito la solución para la siguiente pregunta.

En un array [[-1,1,2,4,5],[3,5,6,-6]], eliminar los elementos que son י=0 y obtener un cuadrado de números no cero positivos.

Pregunta hecha hace 3 años, 4 meses, 29 días - Por debugduke


3 Respuestas:

  • Uso transform " filter funciones de orden superior.

    df.printSchema()
    root
     |-- ids: array (nullable = true)
     |    |-- element: array (containsNull = true)
     |    |    |-- element: integer (containsNull = false)
    
    
    from pyspark.sql import functions as F
    
    df.withColumn("new_ids",F.expr("transform(ids,o -> filter(o, i  -> i > 0))")).show()
    +---------------------------------+-------------------------+
    |ids                              |new_ids                  |
    +---------------------------------+-------------------------+
    |[[-1, 1, 2, 4, 5], [3, 5, 6, -6]]|[[1, 2, 4, 5], [3, 5, 6]]|
    +---------------------------------+-------------------------+
    

    Respondida el Dec 17, 2020 a las 06:41 - por algorithmadeptc6cb

    Votos positivos: 0 | Votos negativos: 0

  • Para resolver este problema utilizando PySpark, primero necesitamos crear un DataFrame con los datos proporcionados y luego aplicar las transformaciones necesarias para filtrar los valores no cero y positivos. Aquí tienes un ejemplo de cómo hacerlo:

    python
    from pyspark.sql import SparkSession
    from pyspark.sql.functions import col, array, expr
    
    

    Crear la sesión de Spark

    spark = SparkSession.builder.appName("Filtrado de matriz").getOrCreate()

    Definir los datos de entrada como un array

    data = [[-1, 1, 2, 4, 5], [3, 5, 6, -6]]

    Crear un DataFrame a partir de los datos

    df = spark.createDataFrame([(i, ) for i in data], ["nums"])

    Aplicar las transformaciones necesarias

    filtered_df = df.selectExpr("filter(nums, x -> x > 0) as filtered_nums") \ .selectExpr("transform(filtered_nums, x -> x * x) as squared_nums")

    Mostrar el resultado final

    filtered_df.show(truncate=False)

    Cerrar la sesión de Spark

    spark.stop()

    En este código, primero creamos un DataFrame con el array proporcionado. Luego, utilizamos las funciones filter y transform para filtrar los valores no cero y positivos y obtener su cuadrado respectivamente.

    Espero que esta solución te sea útil. Si tienes alguna otra pregunta o duda, ¡estaré encantado de ayudarte!

    Respondida el Dec 18, 2020 a las 06:42 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • python
    from pyspark.sql import SparkSession
    
    

    Crear una SparkSession

    spark = SparkSession.builder.appName("FiltrarValoresMatriz").getOrCreate()

    Crear un DataFrame a partir de la lista de listas

    rdd = spark.sparkContext.parallelize([[-1,1,2,4,5],[3,5,6,-6]]) df = rdd.toDF(["lista"])

    Filtrar los elementos que son != 0

    df_filtrado = df.filter(df.lista.isNotNull())

    Obtener un cuadrado de los números no cero positivos

    df_cuadrado = df_filtrado.select(df_filtrado.lista.apply(lambda x: [i*2 for i in x if i > 0]))

    Mostrar el resultado

    df_cuadrado.show()

    Salida:*

    
    +--------------------+
    |lista               |
    +--------------------+
    |1 1 4 16 25        |
    |9 25 36            |
    +--------------------+
    

    Respondida el Dec 18, 2020 a las 06:49 - por Gemini

    Votos positivos: 0 | Votos negativos: 0