Melhorias de performance

Limpeza de dados com o PySpark

Mike Metzger

Data Engineering Consultant

Explicando o plano de execução do Spark

voter_df = df.select(df['VOTER NAME']).distinct()
voter_df.explain()
== Physical Plan ==
*(2) HashAggregate(keys=[VOTER NAME#15], functions=[])
+- Exchange hashpartitioning(VOTER NAME#15, 200)
   +- *(1) HashAggregate(keys=[VOTER NAME#15], functions=[])
      +- *(1) FileScan csv [VOTER NAME#15] Batched: false, Format: CSV, Location: 
      InMemoryFileIndex[file:/DallasCouncilVotes.csv.gz], 
      PartitionFilters: [], PushedFilters: [], 
      ReadSchema: struct<VOTER NAME:string>
Limpeza de dados com o PySpark

O que é shuffling?

Shuffling é mover dados entre workers para concluir uma tarefa

  • Esconde a complexidade do usuário
  • Pode ser lento para concluir
  • Reduz a vazão geral
  • Muitas vezes é necessário, mas tente minimizar
Limpeza de dados com o PySpark

Como limitar shuffling?

  • Limite o uso de .repartition(num_partitions)
    • Prefira .coalesce(num_partitions)
  • Tenha cuidado ao chamar .join()
  • Use .broadcast()
  • Talvez não seja preciso limitar
Limpeza de dados com o PySpark

Broadcasting

Broadcasting:

  • Fornece uma cópia de um objeto para cada worker
  • Evita comunicação indevida/excessiva entre nós
  • Pode acelerar muito operações com .join()

Use o método .broadcast(<DataFrame>)

from pyspark.sql.functions import broadcast
combined_df = df_1.join(broadcast(df_2))
Limpeza de dados com o PySpark

Vamos praticar!

Limpeza de dados com o PySpark

Preparing Video For Download...