Convertir archivo de objetos JSON a Parquet
apache apache-drill (3)
Para completar la respuesta de @rahul, puede usar simulacro para hacer esto, pero necesitaba agregar más a la consulta para que funcionara de la caja con simulacro.
create table dfs.tmp.`filename.parquet` as select * from dfs.`/tmp/filename.json` t
Necesitaba darle el complemento de almacenamiento (dfs) y la configuración "raíz" puede leer todo el disco y no se puede escribir. Pero la configuración de tmp (dfs.tmp) es de escritura y se escribe en / tmp. Así que escribí allí.
Pero el problema es que si el json está anidado o tal vez contiene caracteres inusuales, obtendría un error críptico.
org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR: java.lang.IndexOutOfBoundsException:
Si tengo una estructura que se parece a los members: {id:123, name:"joe"}
tendría que cambiar la selección a
select members.id as members_id, members.name as members_name
o
select members.id as `members.id`, members.name as `members.name`
para que funcione.
Supongo que la razón es que el parquet es una tienda de "columnas", por lo que necesita columnas. JSON no está por defecto, así que necesitas convertirlo.
El problema es que tengo que conocer mi esquema json y tengo que compilar el select para incluir todas las posibilidades. Sería feliz si alguien sabe una mejor manera de hacer esto.
Motivación: Quiero cargar los datos en Apache Drill. Entiendo que Drill puede manejar la entrada JSON, pero quiero ver cómo se realiza en los datos de Parquet.
¿Hay alguna forma de hacer esto sin cargar primero los datos en Hive, etc. y luego usar uno de los conectores de parquet para generar un archivo de salida?
Puede usar Drill para crear un archivo de parquet a partir de la salida de cualquier consulta.
create table student_parquet as select * from `student.json`;
La línea anterior debe ser lo suficientemente buena. Drill interpreta los tipos basados en los datos en los campos. Puede sustituir su propia consulta y crear un archivo de parquet.
Kite tiene soporte para importar JSON a formatos tanto de Avro como de Parquet a través de su utilidad de línea de comandos, kite-dataset
.
Primero, inferirías el esquema de tu JSON:
kite-dataset json-schema sample-file.json -o schema.avsc
Luego puedes usar ese archivo para crear una tabla de Parquet Hive:
kite-dataset create mytable --schema schema.avsc --format parquet
Y finalmente, puede cargar su JSON en el conjunto de datos.
kite-dataset json-import sample-file.json mytable
También puede importar un entero directamente almacenado en HDFS. En ese caso, Kite utilizará un trabajo de MR para realizar la importación.