Skip to content

huemul_DataFrame

Sebastián Rodríguez edited this page Nov 1, 2019 · 8 revisions

huemul_DataFrame

huemul_DataFrame es una extensión de los DataFrame de Spark. Esta clase expone atributos y métodos relacionados a la implementación de DataQuality.

Inicialización

La clase se inicializa con la instancia de huemul_BigDataGovernance y Control

import com.huemulsolutions.bigdata.common._

val MyDataFrame = new huemul_DataFrame(huemulBigDataGov, Control)

Métodos para la asignación/creación de DataFrame.

  • setDataFrame(DF: DataFrame, Alias: String, SaveInTemp: Boolean = true): Permite asignar el DataFrame "DF" de Spark a huemul_DataFrame, y adicionalmente crea una vista temporal con el nombre "Alias" para ser accedido desde Spark-SQL. El parámetro SaveInTemp hace referencia a guardar una copia física del DataFrame en la carpeta temporal indicada en GlobalSettings.

  • DF_from_SQL(Alias: String, sql: String, SaveInTemp: Boolean = true, NumPartitions: Integer = null): Permite ejecutar una sentencia SQL desde el parámetro "sql", y el DataFrame resultante es creado como vista temporal con el alias "Alias" para ser accedido desde Spark-SQL, el DataFrame resultante puede ser accedido usando el método DataFrame indicado al principio de esta documentación. El parámetro SaveInTemp hace referencia a guardar una copia física del DataFrame en la carpeta temporal indicada en GlobalSettings. El parámetro opcional NumPartitions (desde la versión 1.3) indica la cantidad de particiones en Spark, esto permite administrar de mejor forma la performance del aplicativo .

import com.huemulsolutions.bigdata.common._

val MyDataFrame = new huemul_DataFrame(huemulBigDataGov, Control)
MyDataFrame.DF_from_SQL("YourAlias","select * from yourTable")
  • DF_from_RAW(rowRDD: RDD[Row], Alias: String): Permite crear un DataFrame a partir de un objeto RDD[row], y el DataFrame resultante es creado como vista temporal con el alias "Alias" para ser accedido desde Spark-SQL, el DataFrame resultante puede ser accedido usando el método DataFrame indicado al principio de esta documentación.

  • savePersistToDisk(overwriteIfExist: Boolean, tableNameInHive: String, localPath: String, globalPath: ArrayBuffer[huemul_KeyValuePath] = huemulBigDataGov.GlobalSettings.SANDBOX_BigFiles_Path, databaseName: ArrayBuffer[huemul_KeyValuePath] = huemulBigDataGov.GlobalSettings.SANDBOX_DataBase ): Boolean: permite guardar los resultados de un DF en formato parquet, recibe los siguientes parámetros:

    • OverriteIfExist: Boolean: Indica si debe sobreescribir el contenido anterior de la tabla (true), de lo contrario (false), agrega el nuevo contenido al ya existente.
    • tableNameInHive: String: Indica el nombre que tendrá la tabla en Hive. El mismo nombre es utilizado para crear la estructura parquet.
    • localPath: String: Indica la ruta local donde se guardarán los datos, esto a partir de la ruta global.
    • globalPath: ArrayBuffer[huemul_KeyValuePath]: ruta global donde se guardará el fichero parquet (ruta definida en globalSettings). Este parámetro es opcional, en caso de no especificar se toma la ruta definida en SANDBOX_BigFiles_Path.
    • databaseName: ArrayBuffer[huemul_KeyValuePath: Este parámetro es opcional e indica la base de datos donde se creará la tabla en hive. En caso de no especificar, la tabla será creada en la base de datos Sandbox (SANDBOX_DataBase).

Ejemplo: el siguiente ejemplo muestra la apertura de un archivo RAW de taxis de NewYork, el dataFrame resultante es guardado en disco con el nombre "taxi_yellow_${param_year}_${param_month}"

      var DF_RAW =  new yellow_tripdata_mes(huemulBigDataGov, Control)
      if (!DF_RAW.open("DF_RAW", Control, param_year, param_month, 1, 0, 0, 0))       
        Control.RaiseError(s"error encontrado, abortar: ${DF_RAW.Error.ControlError_Message}")
      
      Control.NewStep("Guardando datos en bruto en sandbox")
      DF_RAW.DataFramehuemul.savePersistToDisk(true, s"taxi_yellow_${param_year}_${param_month}", "taxi") //, globalPath, databaseName)

Métodos para acceder al DataFrame.

  • DataFrame: DataFrame: Devuelve un objeto DataFrame de Spark
  • getDataSchema(): StructType: Devuelve el esquema del DataFrame
  • getNumRows(): Long: Devuelve la cantidad de filas que tiene un DataFrame, es similar a usar el método DataFrame.count()
  • getNumCols(): Integer: Devuelve la cantidad de columnas que posee el DataFrame
  • Alias: String: Devuelve el alias asignado en los métodos "setDataFrame", "DF_from_SQL" y "DF_from_RAW". y puede ser usado en SQL para acceder al DataFrame

Métodos para Aplicar DataQuality.

  • DQ_NumRowsInterval(ObjectData: Object, NumMin: Long, NumMax: Long): huemul_DataQualityResult: Valida que el DataFrame actual tenga el rango de filas indicado en los parámetros "NumMin" y "NumMax", el parámetro ObjectData es el objeto "huemul_Table" (si existe) para asignar el DataQuality a la tabla. Si la cantidad de registros es menor a "NumMin", Error_Code tendrá el valor "2001", si la cantidad de registros es mayor al parámetro "NumMax" Error_Code tendrá el valor "2002"
import com.huemulsolutions.bigdata.common._

val MyDataFrame = new huemul_DataFrame(huemulBigDataGov, Control)
val DQResult = MyDataFrame.DQ_NumRowsInterval(null,10,200)
if (DQResult.isError) {
  println(s"Error ${DQResult.Error_Code} en DataQuality: ${DQResult.Description}")
}
  • DQ_NumRows(ObjectData: Object, NumRowsExpected: Long): huemul_DataQualityResult: Valida que el DataFrame actual tenga exactamente la misma cantidad de registros que el parámetro "NumRowsExpected", el parámetro ObjectData es el objeto "huemul_Table" (si existe) para asignar el DataQuality a la tabla. Si la cantidad de registros es menor, Error_Code tendrá el valor "2003", si la cantidad de registros es mayor, Error_Code tendrá el valor "2004"

  • DQ_NotNullValues(ObjectData: Object, Col: String) : huemul_DataQualityResult: Aplica validación de nulos sobre la columna indicada en el parámetro "Col". En caso de existir algún valor null en la columna, Error_Code devolverá el valor "2007"

  • DQ_CompareDF(ObjectData: Object, DF_to_Compare: DataFrame, PKFields: String) : huemul_DataQualityResult: Compara fila a fila y columna a columna el DataFrame actual con el DataFrame del parámetro "DF_to_Compare", la clave de comparación es la indicada en el parámetro "PKFields", si hay más de un campo de comparación, se debe especificar de la forma "campo1,campo2". Los nombres de campos de los DF deben ser los mismos. Este método solo compara los campos que coincidan en nombre, el resto de los campos no serán comparados. Error_Code tendrá el valor "2005" en caso que el método encuentre alguna diferencia.

  • DF_RunDataQuality(ManualRules: ArrayBuffer[huemul_DataQuality]): huemul_DataQualityResult: Ejecuta validaciones de datos sobre el DataFrame actual. Las reglas de validación que aplicará están contenidas en el arreglo de DataQuality del parámetro "ManualRules". El resultado detallado de la ejecución de cada regla se puede obtener utilizando el método "getDQResult()"

Métodos para obtener información del DataFrame.

  • DQ_StatsByCol(ObjectData: Object, Col: String) : huemul_DataQualityResult: Devuelve estadísticas de la columna indicada en el parámetro "Col" del DataFrame actual, el método devuelve los valores mínimos(min_Col), máximos (max_Col), promedio (avg_Col), suma (sum_Col), cantidad de distintos (count_distinct_Col), cantidad total (count_all_Col), largo mínimo (minlen_Col), largo máximo (maxlen_Col), cantidad de vacios (count_empty), cantidad de nulos (count_null) y cantidad de ceros (count_cero). Es equivalente a llamar al método DQ_StatsByCol por cada columna.

  • DQ_StatsAllCols(ObjectData: Object) : huemul_DataQualityResult: Devuelve estadísticas de cada columna del DataFrame actual, incluyendo valores mínimos(min_Col), máximos (max_Col), promedio (avg_Col), suma (sum_Col), cantidad de distintos (count_distinct_Col), cantidad total (count_all_Col), largo mínimo (minlen_Col), largo máximo (maxlen_Col), cantidad de vacios (count_empty), cantidad de nulos (count_null) y cantidad de ceros (count_cero). Es equivalente a llamar al método DQ_StatsByCol por cada columna.

  • DQ_StatsByFunction(ObjectData: Object, function: String) : huemul_DataQualityResult: Devuelve estadísticas de todas las columnas del DataFrame, aplicando la función indicada en el parámetro "function". Las funciones de agregación permitidas son "sum, max, min, count, count_distinct, max_length, min_length"

DataQualityResult.

Esta clase devuelve el resultado de la ejecución del DataQuality/Estadísticas:

  • isError: Boolean: Indica si el resultado del DataQuality tuvo errores
  • Error_Code: Integer: Devuelve el código de error
  • Description: String: Devuelve la descripción del error
  • dqDF : DataFrame: Devuelve información detallada del error/estadísticas
  • profilingResult: huemul_Profiling: Devuelve el resultado de la ejecución de estadísticas