Spark SQL - tabelas Hive

Hive vem empacotado com a biblioteca Spark como HiveContext, que herda de SQLContext. Usando HiveContext, você pode criar e localizar tabelas no HiveMetaStore e escrever consultas nele usando HiveQL. Os usuários que não possuem uma implantação de Hive existente ainda podem criar um HiveContext. Quando não configurado pelohive-site.xml, o contexto cria automaticamente um metastore chamado metastore_db e uma pasta chamada warehouse no diretório atual.

Considere o seguinte exemplo de employeegravar usando tabelas Hive. Todos os dados gravados estão no arquivo de texto denominadoemployee.txt. Aqui, primeiro inicializaremos o objeto HiveContext. Usando isso, vamos criar uma tabela, carregar os dados de registro de funcionários nela usando a linguagem HiveQL e aplicar algumas consultas nela.

employee.txt - Coloque-o no diretório atual onde o spark-shell está sendo executado.

1201, satish, 25
1202, krishna, 28
1203, amith, 39
1204, javed, 23
1205, prudvi, 23

Inicie o Spark Shell

Primeiro, temos que iniciar o Spark Shell. Trabalhar com HiveTables significa que estamos trabalhando no Hive MetaStore. Portanto, o sistema criará automaticamente um warehouse para armazenar dados da tabela. Portanto, é melhor executar o Spark Shell no superusuário. Considere o seguinte comando.

$ su
password:
#spark-shell
scala>

Criar objeto SQLContext

Use o seguinte comando para inicializar o HiveContext no Spark Shell

scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

Criar tabela usando HiveQL

Use o seguinte comando para criar uma tabela chamada employee com os campos id, name, e age. Aqui, estamos usando oCreate declaração de HiveQL sintaxe.

scala> sqlContext.sql("CREATE TABLE IF NOT EXISTS employee(id INT, name STRING, age INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'")

Carregar dados na tabela usando HiveQL

Use o seguinte comando para carregar os dados de registro de funcionários na tabela de funcionários. Se for executado com sucesso, os registros de funcionários fornecidos são armazenados noemployee tabela de acordo com o esquema.

scala> sqlContext.sql("LOAD DATA LOCAL INPATH 'employee.txt' INTO TABLE employee")

Selecione os campos da tabela

Podemos executar qualquer tipo de consulta SQL na tabela. Use o seguinte comando para buscar todos os registros usando a consulta de seleção do HiveQL.

scala> val result = sqlContext.sql("FROM employee SELECT id, name, age")

Para exibir os dados do registro, chame o show() método no DataFrame de resultado.

scala> result.show()

Resultado

<console>:26, took 0.157137 s
+------+---------+----+
|  id  | name    |age |
+------+---------+----+
| 1201 | Satish  | 25 |
| 1202 | Krishna | 28 |
| 1203 | amith   | 39 |
| 1204 | javed   | 23 |
| 1205 | prudvi  | 23 |
+------+---------+----+