mapInArrow

Mapeia um iterador de lotes no DataFrame atual usando uma função nativa Python que é realizada em pyarrow.RecordBatchs tanto como entrada como saída, e devolve o resultado como DataFrame.

Sintaxe

mapInArrow(func: "ArrowMapIterFunction", schema: Union[StructType, str], barrier: bool = False, profile: Optional[ResourceProfile] = None)

Parâmetros

Parâmetro Tipo Descrição
func função uma função nativa Python que pega num iterador de pyarrow.RecordBatchs e gera um iterador de pyarrow.RecordBatchs.
schema DataType ou str o tipo de retorno do func no PySpark. O valor pode ser um pyspark.sql.types.DataType objeto ou uma cadeia de tipos formatada em DDL.
barrier bool, opcional, por defeito False Use a execução em modo barreira, garantindo que todos os trabalhadores Python na fase serão lançados simultaneamente.
profile ResourceProfile, opcional O ResourceProfile opcional a ser usado para mapInArrow.

Devoluções

DataFrame

Exemplos

import pyarrow as pa
df = spark.createDataFrame([(1, 21), (2, 30)], ("id", "age"))
def filter_func(iterator):
    for batch in iterator:
        pdf = batch.to_pandas()
        yield pa.RecordBatch.from_pandas(pdf[pdf.id == 1])
df.mapInArrow(filter_func, df.schema).show()
# +---+---+
# | id|age|
# +---+---+
# |  1| 21|
# +---+---+

df.mapInArrow(filter_func, df.schema, barrier=True).collect()
# [Row(id=1, age=21)]