Tengo un fragmento de código que funciona muy bien en Pandas, sin embargo, mi tamaño de datos es bastante alto y Pandas consume mucha memoria. Aquí es donde estoy tratando de tener una solución basada en PySpark o Koalas ...

-2
T3J45 19 feb. 2021 a las 18:29

1 respuesta

La mejor respuesta

Si entendí correctamente el primer reemplazo de par, podría escribirlo de esta manera en pyspark:

from pyspark.sql import functions as F

df1 = df.withColumn(
    "details_trunc",
    F.split(
        F.regexp_replace(
            "details",
            r"[0-9]+MB?P?S? |\(.*\)|[0-9]+\s?mins? |[0-9]+GB? |\b[0-9]+\b",
            ""
        ),
        r"\-|fr|ends|:|\$"
    )[0]
)

Básicamente, aquí la función regexp_replace elimina todas las coincidencias correspondientes. Luego, use split por expresión regular \-|fr|ends|:|\$ y obtenga el primer elemento.

Para la segunda parte, puede usar rlike dentro de la expresión when:

df2 = df1.withColumn(
    "details_trunc",
    F.when(
        F.col("details_trunc").rlike(r'Apple App Store.*$'), 'Apple App Store'
    ).when(
        F.col("details_trunc").rlike(r'Google Play.*$'), 'Google Play'
    ).when(
        F.col("details_trunc") == '', 'NA'
    ).otherwise(F.col("details_trunc"))
)

No lo he probado en todos los casos, pero este es un buen punto de partida sobre cómo puede reescribir la lógica de los pandas en Pyspark.

1
blackbishop 19 feb. 2021 a las 16:40