<jupyter_start><jupyter_text>Temperatura mínimaEncontrar a temperatura mínima medida em uma estação  Conectando o Drive ao ColabA primeira coisa que você quer fazer quando está trabalhando no Colab é montar seu Google Drive. Isso permitirá que você acesse qualquer diretório em seu Drive dentro do notebook Colab.<jupyter_code>from google.colab import drive
drive.mount('/content/drive')<jupyter_output>Mounted at /content/drive<jupyter_text>Instalando o PySpark no Google ColabInstalar o PySpark não é um processo direto como de praxe em Python. Não basta usar um pip install apenas. Na verdade, antes de tudo é necessário instalar dependências como o Java 8, Apache Spark 2.3.2 junto com o Hadoop 2.7.<jupyter_code># instalar as dependências
!apt-get install openjdk-8-jdk-headless -qq > /dev/null
!wget -q https://archive.apache.org/dist/spark/spark-2.4.4/spark-2.4.4-bin-hadoop2.7.tgz
!tar xf spark-2.4.4-bin-hadoop2.7.tgz
!pip install -q findspark<jupyter_output><empty_output><jupyter_text>A próxima etapa é configurar as variáveis de ambiente, pois isso habilita o ambiente do Colab a identificar corretamente onde as dependências estão rodando.Para conseguir “manipular” o terminal e interagir como ele, você pode usar a biblioteca os.<jupyter_code># configurar as variáveis de ambiente
import os
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = "/content/spark-2.4.4-bin-hadoop2.7"

# tornar o pyspark "importável"
import findspark
findspark.init('spark-2.4.4-bin-hadoop2.7')<jupyter_output><empty_output><jupyter_text>Implementando a aplicaçãoA primeira coisa a fazer é criar a aplicação e a sessão do Spark.<jupyter_code>from pyspark.sql import SparkSession

def parse_line(line):
    fields = line.split(',')
    station_id = fields[0]
    entry_type = fields[2]
    temperature = float(fields[3]) * 0.1 * (9.0 / 5.0) + 32.0
    return station_id, entry_type, temperature

spark = (SparkSession
         .builder
         .appName("MinTemperatures")
         .getOrCreate())<jupyter_output><empty_output><jupyter_text>Carregar cada linha dos dados de origem em um RDD<jupyter_code>lines = spark.sparkContext.textFile("/content/drive/MyDrive/Ensino/IFG/2022/01/Big_Data/pos-ia-bd/04-spark/data/1800.csv")<jupyter_output><empty_output><jupyter_text>Use nossa função `parseLines` para converter em tuplas<jupyter_code>parsedLines = lines.map(parse_line)<jupyter_output><empty_output><jupyter_text>Filtre todas as entradas, usando TMIN<jupyter_code>minTemps = parsedLines.filter(lambda x: "TMIN" in x[1])<jupyter_output><empty_output><jupyter_text>Converte para (stationID, temperature)<jupyter_code>stationTemps = minTemps.map(lambda x: (x[0], x[2]))<jupyter_output><empty_output><jupyter_text>Reduza por stationID mantendo a temperatura mínima encontrada<jupyter_code>minTemps = stationTemps.reduceByKey(lambda x, y: min(x, y))<jupyter_output><empty_output><jupyter_text>Colete, formate e imprima os resultados<jupyter_code>results = minTemps.collect()

for result in results:
  print(result[0] + "\t{:.2f}F".format(result[1]))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10492436433859029, 'fraction_numerical': 0.02027679433537174, 'mean_word_length': 5.860927152317881, 'pattern_counts': {'":': 0, '<': 40, '<?xml version=': 0, '>': 41, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '306644', 'license': 'Apache-2.0', 'n_tokens_mistral': 1192, 'n_tokens_neox': 1133, 'n_words': 268, 'path': '04-spark/MinTemperatures.ipynb', 'repo_name': 'WesleiNiz/pos-ia-bd', 'size': '3107'}