suponha que você tem uma situação em que um conjunto de dados é muito pequeno e outro conjunto de dados é bastante grande, e você quer realizar a operação de junção entre estes dois. Nesse caso, devemos ir para a junção de transmissão para que o pequeno conjunto de dados pode caber em sua variável de transmissão. A sintaxe para usar a variável broadcast é df1.join(broadcast (df2)). Aqui temos um segundo dataframe que é muito pequeno e estamos mantendo este quadro de dados como uma variável de transmissão.
Código:
Val broadcastVar = sc.difusão (Lista(1, 2, 3))
broadcastVar.value
res0: Array = Array(1, 2, 3)
val accum = sc.longaccumulador (“meu Acumulador”)
sc.parallelizar(Lista(1, 2, 3, 4)).foreach(x = > accum.
accum.value
res2: Long = 10
Cache and Persist
- Spark provides its own caching mechanisms like persist () and cache ().
- cache () and persist () will store the dataset in memory.Quando você tem um pequeno conjunto de dados que precisa ser usado várias vezes em seu programa, nós guardamos esse conjunto de dados.Cache() – sempre na memória persistem() – memória e discos
Spark fornece seu próprio mecanismo de cache como persistir e Cache. Persistir e mecanismos de Cache irá armazenar o conjunto de dados na memória sempre que houver exigência, onde você tem um pequeno conjunto de dados e que o conjunto de dados está sendo usado várias vezes em seu programa. Se aplicarmos o RDD.Cache() ele sempre armazenará os dados na memória, e se aplicarmos RDD.Persistir () então alguma parte dos dados podem ser armazenados na memória alguns podem ser armazenados no disco.
5. ByKey Operation
- Shuffles are heavy operation which consuma a lot of memory.
- enquanto codifica em Spark, o Usuário deve sempre tentar evitar a operação de baralhar.
- a baralhação elevada pode dar origem a um erro extra-mensurável; para evitar tal erro, o utilizador pode aumentar o nível de paralelismo.
- Use reduceByKey em vez de groupByKey.
- Partilhe os dados correctamente.Como sabemos durante a nossa transformação de faísca, temos muitas operações ByKey. As operações ByKey geram muita confusão. Shuffles são uma operação pesada porque consomem muita memória. Enquanto codifica em Spark, um usuário deve sempre tentar evitar qualquer operação de baralhar, porque a operação de baralhar irá degradar o desempenho. Se houver um shuffling elevado então um usuário pode começar o erro fora da memória. Neste caso, para evitar esse erro, um usuário deve aumentar o nível de paralelismo. Em vez de groupBy, um usuário deve ir para o reduceByKey porque groupByKey cria um monte de embaralhamento que dificulta o desempenho, enquanto reduceByKey não baralha os dados tanto quanto. Portanto, reduceByKey é mais rápido do que groupByKey. Sempre que qualquer operação ByKey é usada, o Usuário deve particionar os dados corretamente.
6. File Format selection
- Spark suporta muitos formatos, tais como CSV, JSON, XML, PARQUET, ORC, AVRO, etc.
- Spark jobs pode ser otimizado escolhendo o arquivo parquet com compressão rápida que dá o alto desempenho e melhor análise.
- Parquet file é nativo de Spark que carrega os metadados junto com seu rodapé.
Spark vem com muitos formatos de arquivo como CSV, JSON, XML, PARQUET, ORC, AVRO e muito mais. Um Spark job pode ser otimizado escolhendo o arquivo parquet com compressão rápida. Parquet de arquivo nativo para o Faísca, que carregam os metadados juntamente com os seus rodapé como sabemos parquet de arquivo nativo para o faísca, que é em formato binário e, juntamente com os dados que também carregam o rodapé também carrega os metadados e o rodapé assim, sempre que você criar qualquer parquet arquivo, você vai ver .ficheiro de meta-dados na mesma pasta, juntamente com o ficheiro de dados.
Código:
Val peopleDF = spark.ler.json (“examples/src/main/resources/people.json”)
peopleDF.escrever.parquet (“people.parquet”)
val parquetFileDF = spark.ler.parquet (“people.parquet”)
val usersDF = spark.ler.format (“avro”).load (“examples/src/main/resources/users.avro”)
usersDF.seleccione (“nome”,”favorite_color”).escrever.format (“avro”).save (“names andfavors.avro”)
afinação de recolha de lixo
- a recolha de lixo JVM pode ser um problema quando se tem uma grande colecção de objectos não utilizados.
- o primeiro passo na afinação GC é coletar estatísticas, escolhendo-verbose ao submeter trabalhos de faísca.Numa situação ideal, tentamos manter as ogivas GC < 10% da memória de heap.Como sabemos por baixo da nossa tarefa de faísca está a correr na plataforma JVM, a recolha de lixo JVM pode ser problemática quando se tem uma grande colecção de um objecto não utilizado, pelo que o primeiro passo na sintonização da recolha de lixo é recolher estática, escolhendo a opção na sua Spark submit verbose. Em geral, numa situação ideal, devemos manter a memória da nossa colecção de lixo a menos de 10% da memória do heap.
8. Nível de paralelismo
- o paralelismo desempenha um papel muito importante ao afinar postos de trabalho.
- cada tarefa de partição ~ requer um único núcleo para processamento.
- Há duas maneiras de manter o paralelismo:
- Reparticionar: Dá igual número de partições com alta baralhar
- Adesão: Geralmente reduz o número de partições com menos de baralhar.
em qualquer ambiente distribuído, o paralelismo desempenha um papel muito importante enquanto afina o seu trabalho de faísca. Sempre que um trabalho de faísca é submetido, ele cria a mesa que conterá etapas, e as tarefas dependem da partição para que cada partição ou tarefa requer um único núcleo do sistema para processamento. Existem duas formas de manter o paralelismo – a repartição e a Coalesce. Sempre que você aplica o método de repartição que lhe dá igual número de partições, mas ele vai baralhar muito para que não é aconselhável ir para Repartition quando você quer lash todos os dados. Coalesce geralmente reduz o número de partições e cria menos baralhamento de dados.
estes factores para a optimização da faísca, se correctamente utilizados, podem –