quinta-feira, 7 de dezembro de 2017

Spark e R em 15 minutos

Tem um tempinho? Que tal aprender a usar Spark com a linguagem R?

O Spark é um software fantástico! E possui interfaces para várias linguagens de programação, como: Java, Scala, Python e R.
Para trabalhos de data science, as linguagens Python e R são mais populares. Eu já mostrei aqui um job usando Python e Spark ("Usando Spark-SQL com Python" – https://www.linkedin.com/pulse/usando-spark-sql-com-python-cleuton-sampaio-de-melo-junior). Agora, vou mostrar como usar o Spark com R, que é muito popular entre os cientistas de dados.
O dataset que vamos usar vem de observações registradas pelos sensores do projeto Kuaray (http://kuaray.org), que medem a qualidade do ar (presença de GHG na atmosfera).
Os dados são enviados para um banco DynamoDB, no AWS, através do serviço AWS IoT. Uma expressão AWS Lambda capta o envio e registra no Banco.
Vamos usar um pedaço deste dataset cujo layout é assim (pode usar esse pedaço de dataset para experimentar):
id,date,humidity,latitude,longitude,nodeName,quality,temperature
1cecdfdc-f5c8-4674-a3e3-93655fc6ef29,2017-04-02T20:17:21.853Z,43.33333333333,-22.9222276,-43.2428463,kuaraynode,113,28.099999745686848
700e3a6c-217c-4d1a-92ab-89e30215ad8b,2017-04-02T19:49:51.918Z,41.43333,-22.9222276,-43.2428463,kuaraynode,112.66666666666667,28.60000
9d6a73f8-294f-4163-be5e-fbf4d6089865,2017-08-07T21:11:06.774Z,52.3000001907,-22.9222276,-43.2428463,kuaraynode,82,24.274999618530273
9999110e-0f2f-4e8b-8013-0f36dcf1ad64,2017-04-02T20:20:21.899Z,44.149999618,-22.9222276,-43.2428463,kuaraynode,112.75,27.700000762939453
94bb9eb5-4763-45e0-9225-730376119c72,2017-04-02T19:49:36.908Z,41.56666,-22.9222276,-43.2428463,kuaraynode,112.33333333333333,28.700000
Temos a localização de cada sensor: Latitude e Longitude, e os valores, incluindo o de qualidade do ar ("quality").
Vamos criar um job em R utilizando a biblioteca "SparkR":
library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib")))
sparkR.session(master = "local[*]", sparkConfig = list(spark.driver.memory = "2g"))

ds = read.csv("medicoes.csv", header = TRUE)
spdf = as.DataFrame(ds)
printSchema(spdf)
head(summarize(groupBy(spdf, spdf$latitude,spdf$longitude), avg(spdf$quality)))
Podemos usar o sinal de igual ("=") para atribuições, em vez daquela seta maluca do R ("←").
Para instalar o Apache Spark, visite https://spark.apache.org/downloads.html e baixe um arquivo "tar-gz". Extraia-o para sua máquina local e lembre-se da pasta!
Adicione a pasta "bin" à variável PATH ou execute o programa "spark-submit" a partir dela.
Você precisará de uma versão instalada de R! Para isto, visite: https://cran.r-project.org/mirrors, selecione o site mirror perto de você. A instalação é simples:
  • MS Windows: Baixe o arquivo e execute o instalador R-[versão].exe;
  • Linux: Há versões disponíveis em quase todos os repositórios. Por exemplo: Ubuntu: "sudo apt-get install r-base";
  • MacOS: Há um arquivo "pkg" para instalação do R. Se quiser, há pacotes prontos em https://r.research.att.com.
Para executar este programa, você necessitará criar um arquivo R e usar o comando "spark-submit".
O SparkR converte diretamente datasets R em DataFrames, com ajuste do esquema de dados. O comando "printSchema" mostra isso:
 |-- id: string (nullable = true)
 |-- date: string (nullable = true)
 |-- humidity: double (nullable = true)
 |-- latitude: double (nullable = true)
 |-- longitude: double (nullable = true)
 |-- nodeName: string (nullable = true)
 |-- quality: double (nullable = true)
 |-- temperature: double (nullable = true)
O comando "head" imprime o resultado da agregação que eu executei. Este comando invoca a função "sumarize", que, por sua vez, invoca a "groupBy", agregando os registros por Latitude e Longitude, calculando a média do campo "qualidade".
   latitude longitude avg(quality)
1 -22.92223 -43.24285     102.0705
2 -22.91484 -43.22918     120.6243 
Com isto, teremos a média da qualidade do ar por localização de sensor. O dataset completo tem cerca de 100.000 registros e demorou menos de 1 segundo para processá-lo.
Gostou? É semelhante ao que eu fiz com Python e Spark-SQL.
Cleuton Sampaio, M.Sc. Autor do livro: "Datascience para programadores", da Editora Ciência Moderna.

Nenhum comentário:

Postar um comentário