Guía de programación de Spark SQL Descripción general Spark SQL permite que las consultas relacionales expresadas en SQL, HiveQL o Scala se ejecuten utilizando Spark. En el núcleo de este componente es un nuevo tipo de RDD, SchemaRDD. SchemaRDDs se componen de objetos Row, junto con un esquema que describe los tipos de datos de cada columna en la fila. Un SchemaRDD es similar a una tabla en una base de datos relacional tradicional. Se puede crear un SchemaRDD a partir de un RDD existente, un archivo Parquet, un conjunto de datos JSON o ejecutando HiveQL contra los datos almacenados en Apache Hive. Todos los ejemplos de esta página utilizan datos de muestra incluidos en la distribución Spark y se pueden ejecutar en la shell de encendido. Spark SQL permite que las consultas relacionales expresadas en SQL o HiveQL se ejecuten utilizando Spark. En el núcleo de este componente es un nuevo tipo de RDD, JavaSchemaRDD. Los JavaSchemaRDDs se componen de objetos Row, junto con un esquema que describe los tipos de datos de cada columna de la fila. Un JavaSchemaRDD es similar a una tabla en una base de datos relacional tradicional. Se puede crear un JavaSchemaRDD a partir de un RDD existente, un archivo Parquet, un conjunto de datos JSON o ejecutando HiveQL contra los datos almacenados en Apache Hive. Spark SQL permite que las consultas relacionales expresadas en SQL o HiveQL se ejecuten utilizando Spark. En el núcleo de este componente es un nuevo tipo de RDD, SchemaRDD. SchemaRDDs se componen de objetos Row, junto con un esquema que describe los tipos de datos de cada columna en la fila. Un SchemaRDD es similar a una tabla en una base de datos relacional tradicional. Se puede crear un SchemaRDD a partir de un RDD existente, un archivo Parquet, un conjunto de datos JSON o ejecutando HiveQL contra los datos almacenados en Apache Hive. Todos los ejemplos de esta página utilizan datos de ejemplo incluidos en la distribución Spark y se pueden ejecutar en el shell pyspark. Spark SQL es actualmente un componente alfa. Si bien minimizaremos los cambios de API, algunas API pueden cambiar en futuras versiones. Introducción El punto de entrada en toda la funcionalidad relacional de Spark es la clase SQLContext o uno de sus descendientes. Para crear un SQLContext básico, todo lo que necesita es un SparkContext. Además del SQLContext básico, también puede crear un HiveContext, que proporciona un superconjunto de la funcionalidad proporcionada por el SQLContext básico. Las características adicionales incluyen la posibilidad de escribir consultas utilizando el analizador HiveQL más completo, el acceso a HiveUDFs y la capacidad de leer datos de las tablas Hive. Para utilizar un HiveContext, no necesita tener una configuración de Hive existente y todos los orígenes de datos disponibles para un SQLContext todavía están disponibles. HiveContext sólo se empaqueta por separado para evitar incluir todas las dependencias de Hive8217 en la compilación Spark predeterminada. Si estas dependencias no son un problema para su aplicación, entonces se recomienda HiveContext para la versión 1.2 de Spark. Los lanzamientos futuros se centrarán en llevar a SQLContext a la paridad de características con un HiveContext. El punto de entrada en toda la funcionalidad relacional en Spark es la clase JavaSQLContext o uno de sus descendientes. Para crear un JavaSQLContext básico, todo lo que necesita es un JavaSparkContext. Además del SQLContext básico, también puede crear un HiveContext, que proporciona un conjunto estricto estricto de la funcionalidad proporcionada por el SQLContext básico. Las características adicionales incluyen la posibilidad de escribir consultas utilizando el analizador HiveQL más completo, el acceso a HiveUDFs y la capacidad de leer datos de las tablas Hive. Para utilizar un HiveContext, no necesita tener una configuración de Hive existente y todos los orígenes de datos disponibles para un SQLContext todavía están disponibles. HiveContext sólo se empaqueta por separado para evitar incluir todas las dependencias de Hive8217 en la compilación Spark predeterminada. Si estas dependencias no son un problema para su aplicación, entonces se recomienda HiveContext para la versión 1.2 de Spark. Los lanzamientos futuros se centrarán en llevar a SQLContext a la paridad de características con un HiveContext. El punto de entrada en toda la funcionalidad relacional en Spark es la clase SQLContext, o uno de sus descendientes. Para crear un SQLContext básico, todo lo que necesita es un SparkContext. Además del SQLContext básico, también puede crear un HiveContext, que proporciona un conjunto estricto estricto de la funcionalidad proporcionada por el SQLContext básico. Las características adicionales incluyen la posibilidad de escribir consultas utilizando el analizador HiveQL más completo, el acceso a HiveUDFs y la capacidad de leer datos de las tablas Hive. Para utilizar un HiveContext, no necesita tener una configuración de Hive existente y todos los orígenes de datos disponibles para un SQLContext todavía están disponibles. HiveContext sólo se empaqueta por separado para evitar incluir todas las dependencias de Hive8217 en la compilación Spark predeterminada. Si estas dependencias no son un problema para su aplicación, entonces se recomienda HiveContext para la versión 1.2 de Spark. Los lanzamientos futuros se centrarán en llevar a SQLContext a la paridad de características con un HiveContext. La variante específica de SQL que se utiliza para analizar consultas también se puede seleccionar mediante la opción spark. sql. dialect. Este parámetro se puede cambiar utilizando el método setConf en un SQLContext o utilizando un comando SET keyvalue en SQL. Para un SQLContext, el único dialecto disponible es 8220sql8221 que utiliza un analizador SQL simple proporcionado por Spark SQL. En un HiveContext, el valor predeterminado es 8220hiveql8221, aunque 8220sql8221 también está disponible. Dado que el analizador HiveQL es mucho más completo, esto se recomienda para la mayoría de los casos de uso. Fuentes de datos Spark SQL soporta el funcionamiento en una variedad de orígenes de datos a través de la interfaz SchemaRDD. Un SchemaRDD puede ser operado como RDDs normal y también puede ser registrado como una tabla temporal. Registrar un SchemaRDD como una tabla le permite ejecutar consultas SQL sobre sus datos. Esta sección describe los diversos métodos para cargar datos en un SchemaRDD. RDDs Spark SQL soporta dos métodos diferentes para convertir RDDs existentes en SchemaRDDs. El primer método utiliza la reflexión para inferir el esquema de un RDD que contiene tipos específicos de objetos. Este enfoque basado en la reflexión conduce a un código más conciso y funciona bien cuando ya conoce el esquema mientras escribe su aplicación Spark. El segundo método para crear SchemaRDDs es a través de una interfaz programática que le permite construir un esquema y luego aplicarlo a un RDD existente. Si bien este método es más detallado, le permite construir SchemaRDDs cuando las columnas y sus tipos no se conocen hasta el tiempo de ejecución. Inferir el esquema mediante la reflexión El Interaface de Scala para Spark SQL soporta la conversión automática de un RDD que contiene clases de caso a un SchemaRDD. La clase de caso define el esquema de la tabla. Los nombres de los argumentos de la clase de caso se leen mediante la reflexión y se convierten en los nombres de las columnas. Las clases de caso también pueden anidarse o contener tipos complejos como Secuencias o Arrays. Este RDD se puede convertir de forma implícita en un SchemaRDD y luego se registra como una tabla. Las tablas se pueden utilizar en sentencias SQL posteriores. Spark SQL soporta la conversión automática de un RDD de JavaBeans en un Schema RDD. El BeanInfo, obtenido mediante la reflexión, define el esquema de la tabla. Actualmente, Spark SQL no admite JavaBeans que contengan anidados o contengan tipos complejos como Listas o Arrays. Puede crear un JavaBean creando una clase que implementa Serializable y tiene getters y setters para todos sus campos. Se puede aplicar un esquema a un RDD existente llamando a applySchema y proporcionando el objeto Class para el JavaBean. Spark SQL puede convertir un RDD de objetos de fila en un SchemaRDD, deduciendo los tipos de datos. Las filas se construyen pasando una lista de pares clave / valor como kwargs a la clase Row. Las claves de esta lista definen los nombres de columna de la tabla, y los tipos se inferen mirando la primera fila. Puesto que actualmente sólo miramos la primera fila, es importante que no haya datos perdidos en la primera fila del RDD. En futuras versiones planeamos inferir más completamente el esquema mirando más datos, similar a la inferencia que se realiza en los archivos JSON. Especificar el esquema de forma programática Cuando las clases de caso no se pueden definir de antemano (por ejemplo, la estructura de los registros se codifica en una cadena o se analiza un conjunto de datos de texto y se proyectan de manera diferente para diferentes usuarios), se puede crear SchemaRDD Programáticamente con tres pasos. Cree un RDD de la fila s del RDD original Cree el esquema representado por un StructType que coincida con la estructura de la fila s en el RDD creado en el paso 1. Aplique el esquema al RDD de la fila s mediante el método applySchema proporcionado por SQLContext. Cuando las clases JavaBean no se pueden definir con antelación (por ejemplo, la estructura de los registros se codifica en una cadena o se analiza un conjunto de datos de texto y los campos se proyectan de manera diferente para diferentes usuarios), se puede crear un SchemaRDD mediante tres pasos . Cree un RDD de la fila s del RDD original Cree el esquema representado por un StructType que coincida con la estructura de la fila s en el RDD creado en el paso 1. Aplique el esquema al RDD de la fila s mediante el método applySchema proporcionado por JavaSQLContext. Cuando un diccionario de kwargs no se puede definir de antemano (por ejemplo, la estructura de los registros se codifica en una cadena o un conjunto de datos de texto se analizará y los campos se proyectarán de manera diferente para diferentes usuarios), un SchemaRDD puede crearse mediante programación con Tres pasos. Cree un RDD de tuplas o listas del RDD original Cree el esquema representado por un StructType que coincida con la estructura de tuplas o listas en el RDD creado en el paso 1. Aplique el esquema al RDD a través del método applySchema proporcionado por SQLContext. Archivos de parquet Parquet es un formato columnar que es compatible con muchos otros sistemas de procesamiento de datos. Spark SQL proporciona soporte tanto para la lectura como para la escritura de archivos Parquet que conserva automáticamente el esquema de los datos originales. Carga de datos mediante programación Uso de los datos del ejemplo anterior: Conjuntos de datos JSON Spark SQL puede deducir automáticamente el esquema de un dataset JSON y cargarlo como SchemaRDD. Esta conversión puede realizarse utilizando uno de los dos métodos en un SQLContext: jsonFile - carga datos de un directorio de archivos JSON donde cada línea de los archivos es un objeto JSON. JsonRdd - carga datos de un RDD existente donde cada elemento del RDD es una cadena que contiene un objeto JSON. Spark SQL puede inferir automáticamente el esquema de un conjunto de datos JSON y cargarlo como un JavaSchemaRDD. Esta conversión puede realizarse utilizando uno de los dos métodos en un JavaSQLContext: jsonFile - carga datos de un directorio de archivos JSON donde cada línea de los archivos es un objeto JSON. JsonRdd - carga datos de un RDD existente donde cada elemento del RDD es una cadena que contiene un objeto JSON. Spark SQL puede deducir automáticamente el esquema de un dataset JSON y cargarlo como SchemaRDD. Esta conversión puede realizarse utilizando uno de los dos métodos en un SQLContext: jsonFile - carga datos de un directorio de archivos JSON donde cada línea de los archivos es un objeto JSON. JsonRdd - carga datos de un RDD existente donde cada elemento del RDD es una cadena que contiene un objeto JSON. Tablas de cola Spark SQL también admite la lectura y escritura de datos almacenados en Apache Hive. Sin embargo, dado que Hive tiene un gran número de dependencias, no se incluye en el ensamblado Spark predeterminado. Para utilizar Hive, primero debe ejecutar 8220 sbt / sbt - Phive assembly / assembly 8221 (o use - Phive para maven). Este comando crea un nuevo jar de ensamblaje que incluye Hive. Tenga en cuenta que este jarro de ensamblaje de cola también debe estar presente en todos los nodos de trabajo, ya que necesitará acceso a las bibliotecas de serialización y deserialización de cola (SerDes) para tener acceso a los datos almacenados en colmena. La configuración de Hive se realiza colocando su archivo hive-site. xml en conf /. Cuando se trabaja con Hive se debe construir un HiveContext. Que hereda de SQLContext. Y agrega soporte para encontrar tablas en MetaStore y escribir consultas usando HiveQL. Los usuarios que no tienen una implementación de Hive existente pueden crear un HiveContext. Cuando no está configurado por el hive-site. xml, el contexto crea automáticamente metastoredb y warehouse en el directorio actual. Cuando se trabaja con Hive uno debe construir un JavaHiveContext. Que hereda de JavaSQLContext. Y agrega soporte para encontrar tablas en MetaStore y escribir consultas usando HiveQL. Además del método sql, JavaHiveContext también proporciona un método hql, que permite que las consultas se expresen en HiveQL. Cuando se trabaja con Hive se debe construir un HiveContext. Que hereda de SQLContext. Y agrega soporte para encontrar tablas en MetaStore y escribir consultas usando HiveQL. Además del método sql, un HiveContext también proporciona un método hql, que permite que las consultas se expresen en HiveQL. Sintonización de rendimiento Para algunas cargas de trabajo es posible mejorar el rendimiento ya sea mediante el almacenamiento en caché de datos en la memoria o activando algunas opciones experimentales. Almacenamiento en caché de datos en memoria Spark SQL puede almacenar en caché las tablas utilizando un formato columnar en memoria llamando a cacheTable (tableName). A continuación, Spark SQL escaneará sólo las columnas necesarias y ajustará automáticamente la compresión para minimizar el uso de memoria y la presión del GC. Puede llamar a uncacheTable (tableName) para quitar la tabla de memoria. Tenga en cuenta que si llama a cache en lugar de cacheTable. Las tablas no se almacenarán en caché utilizando el formato columnar en memoria, por lo que se recomienda encarecidamente cacheTable para este caso de uso. La configuración del almacenamiento en caché en memoria se puede realizar utilizando el método setConf en SQLContext o ejecutando comandos SET keyvalue mediante SQL. Otras interfaces de SQL Compatibilidad con otros sistemas Escritura de consultas relacionales integradas al lenguaje Spark SQL DataType ReferenciaGeneralpara Documentationpara Communitypara Developmentpara Apache Hive TM El software de almacén de datos de Apache Hive facilita la lectura, escritura y administración de conjuntos de datos grandes que residen en el almacenamiento distribuido mediante SQL. La estructura se puede proyectar en datos ya almacenados. Se proporciona una herramienta de línea de comandos y un controlador JDBC para conectar a los usuarios a Hive. Introducción a Apache Hive Softwarepara Involucrarse con Apache Hive Communitypara Apache Hive es un proyecto de código abierto dirigido por voluntarios de Apache Software Foundation. Anteriormente era un subproyecto de Apachereg Hadoopreg. Pero ahora se ha graduado para convertirse en un proyecto de alto nivel propio. Le animamos a que aprenda sobre el proyecto y aporte su experiencia. Copia de Copyright 2011-2014 La Apache Software Foundation Licenciada bajo la licencia Apache, versión 2.0 Apache Hive, Colmena, Apache, el logotipo de pluma Apache y el logotipo del proyecto Apache Hive son marcas registradas de The Apache Software Foundation. Otros nombres que aparecen en el sitio pueden ser marcas registradas de sus respectivos propietarios. Cartografía de tipo de datos de ubicación en árbol En esta publicación, Drill deshabilita el tipo de datos DECIMAL, incluyendo la conversión a DECIMAL y la lectura de tipos DECIMAL de Parquet y Hive. Para habilitar el tipo DECIMAL, establezca la opción planner. enabledecimaldatatype en true. Tipos no admitidos Drill no admite los siguientes tipos de cola: Actualmente, la versión de Apache Hive utilizada por Drill no admite la marca de hora de cola en formato de época Unix. La solución consiste en utilizar el formato JDBC para la marca de tiempo, que Hive acepta y utiliza Drill. El ejemplo de asignación de tipo muestra cómo utilizar la solución de la forma siguiente. El valor de marca de tiempo aparece en el archivo CSV de ejemplo en formato JDBC: 2017-03-25 01:23:15. Solución: la tabla Hive define la columna i en el comando CREATE EXTERNAL TABLE como una columna de marca de tiempo. La función de extracción de taladro verifica que Drill interpreta correctamente la marca de hora. Ejemplo de asignación de tipo Este ejemplo demuestra la asignación de tipos de datos de cola a tipos de datos de perforación. Utilizando un CSV que tiene los siguientes contenidos, se crea una tabla de cola que tiene valores de diferentes tipos admitidos: Ejemplo Supuestos El ejemplo hace las siguientes suposiciones: El CSV reside en la siguiente ubicación en el entorno de seguridad de la secuencia de comandos: /mapr/demo. mapr/data / Ha habilitado el tipo de datos DECIMAL en Taladro. Definir una tabla externa en Hive En Hive, define una tabla externa utilizando la siguiente consulta: En esta versión, Drill deshabilita el tipo de datos DECIMAL, incluyendo la conversión a DECIMAL y la lectura de los tipos DECIMAL de Parquet y Hive. Para habilitar el tipo DECIMAL, establezca la opción planner. enabledecimaldatatype en true. Comprobar que Hive asignó los datos del CSV a los valores mecanografiados como se esperaba: Connect Drill to Hive y Query el Data Drill 1.8 implementa el parámetro IF EXISTS para los comandos DROP TABLE y DROP VIEW, haciendo IF una palabra reservada en Drill. Como resultado, debe incluir columnas alrededor de la función condicional de Hive IF cuando lo utiliza en una consulta en tablas de cola. Como alternativa, puede utilizar la instrucción CASE en lugar de la función IF. En Taladro, utiliza el complemento de almacenamiento Hive. El uso del complemento de almacenamiento Hive conecta Drill al metastore de Hive que contiene los datos. Los datos de la tabla Colmena muestran los valores esperados. Para validar que Drill interpreta correctamente la marca de tiempo en la columna i, utilice la función de extracción para extraer parte de la fecha: Copyright 2012-2014 Apache Software Foundation, con licencia bajo la licencia Apache, versión 2.0. Apache y el logotipo de la pluma Apache son marcas registradas de The Apache Software Foundation. Otros nombres que aparecen en el sitio pueden ser marcas comerciales de sus respectivos propietarios.
No comments:
Post a Comment