Advertisement
sagudelobe

Untitled

Sep 27th, 2023
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.56 KB | None | 0 0
  1. import org.apache.spark.sql.{DataFrame, SparkSession}
  2. import org.apache.spark.sql.types.{StructField, StructType, StringType, DoubleType, IntegerType}
  3. import org.apache.spark.sql.functions.col
  4.  
  5. // Cambiar la ruta del fichero aquí
  6. val PATH = "/home/usuario/Descargas/abalone.data"
  7.  
  8. val spark = SparkSession.
  9.     builder().
  10.     appName("Evaluación 1 Parte 2 - Manejo de RDDs y Dataframes en Scala").
  11.     master("local").
  12.     getOrCreate()
  13.  
  14. val abaloneSchema = StructType(Array(StructField("Sex", StringType, true),
  15.     StructField("Length", DoubleType, true),
  16.     StructField("Diameter", DoubleType, true),
  17.     StructField("Height", DoubleType, true),
  18.     StructField("Whole_weight", DoubleType, true),
  19.     StructField("Shucked_weight", DoubleType, true),
  20.     StructField("Viscera_weight", DoubleType, true),
  21.     StructField("Shell_weight", DoubleType, true),
  22.     StructField("Rings", IntegerType, true)))
  23.  
  24. val abalone_df = spark.read.format("csv").option("delimiter", ",").schema(abaloneSchema).load(PATH)
  25.  
  26. def informacionBasica(df: DataFrame): Unit = {
  27.     val cnt = df.count()
  28.     // Este cálculo consiste en crear la columna filaNula, la cual es un '&' lógico todas las celdas de una misma fila,
  29.     // Si c0.isNull() & c2.isNull() & ... & c8.isNull() = true, significa que el registro es nulo
  30.     // Luego se filtra el DataFrame por las filas que cumplen este criterio, y se cuentan los registros
  31.     // Entiendo que con map y reduce se puede implementar esto de forma dinámica pero no lo pude hacer funcionar
  32.     val nullCnt = df.withColumn("filaNula",
  33.         col("Sex").isNull && col("Length").isNull && col("Diameter").isNull && col("Height").isNull && col("Whole_weight").isNull && col("Shucked_weight").isNull && col("Viscera_weight").isNull && col("Shell_weight").isNull && col("Rings").isNull).filter($"filaNula").count()
  34.     val distinctCnt = df.distinct().count()
  35.  
  36.     println(s"Número de registros: $cnt")
  37.     println(s"Número de registros nulos: $nullCnt")
  38.     println(s"Número de registros distintos: $distinctCnt")
  39. }
  40.  
  41. println("Información básica")
  42. informacionBasica(abalone_df)
  43.  
  44. println("Estadísticas básicas de tres campos tipo Real")
  45. abalone_df.select("Height", "Shell_weight", "Diameter").summary("count", "count_distinct", "mean", "stddev", "max", "min").show()
  46.  
  47. println("Estadísticas básicas del campo tipo Int")
  48. abalone_df.select("Rings").summary("count", "count_distinct", "mean", "stddev", "max", "min").show()
  49.  
  50. println("Características básicas campo categórico")
  51. abalone_df.createOrReplaceTempView("abalone")
  52.  
  53. spark.sql("SELECT Sex, COUNT(*) AS `Número de registros` FROM abalone GROUP BY Sex").show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement