Como nivelar os dados de diferentes tipos de dados usando o pacote Sparklyr?

Introdução

O código R é gravado usando o pacote Sparklyr para criar o esquema do banco de dados.[Código e banco de dados reproduzíveis são fornecidos]

Resultado Existente

root
|-- contributors : string
|-- created_at : string
|-- entities (struct)
|     |-- hashtags (array) : [string]
|     |-- media (array)
|     |     |-- additional_media_info (struct)
|     |     |       |-- description : string
|     |     |       |-- embeddable : boolean
|     |     |       |-- monetizable : bollean
|     |     |-- diplay_url : string
|     |     |-- id : long
|     |     |-- id_str : string
|     |-- urls (array)     
|-- extended_entities (struct)
|-- retweeted_status (struct)
|-- user (struct)

Quero achatar essa estrutura como abaixo,

resultado esperado

root
|-- contributors : string
|-- created_at : string
|-- entities (struct)
|-- entities.hashtags (array) : [string]
|-- entities.media (array)
|-- entities.media.additional_media_info (struct)
|-- entities.media.additional_media_info.description : string
|-- entities.media.additional_media_info.embeddable : boolean
|-- entities.media.additional_media_info.monetizable : bollean
|-- entities.media.diplay_url : string
|-- entities.media.id : long
|-- entities.media.id_str : string
|-- entities.urls (array)     
|-- extended_entities (struct)
|-- retweeted_status (struct)
|-- user (struct)

Base de dados Navegar para:Dados-178 KB . Em seguida, copie os itens numerados para um arquivo de texto chamado "exemplo". Salve em um diretório chamado "../example.json/" criado em seu diretório de trabalho.

O código R é gravado para reproduzir o exemplo como abaixo,

Código de saída

library(sparklyr)
library(dplyr)
library(devtools)
  devtools::install_github("mitre/sparklyr.nested")
# If Spark is not installed, then also need:
# spark_install(version = "2.2.0")
library(sparklyr.nested)
library(testthat)
library(jsonlite)

Sys.setenv(SPARK_HOME="/usr/lib/spark")    
conf <- spark_config()
conf

Esforços realizados

Jsonlite usado. Mas é incapaz de ler arquivos grandes e também em pedaços. Demorou um tempo sem fim. Então, virei-me para o Sparklyr, pois ele se pergunta e lê 1 bilhão de registros em poucos segundos. Fiz um estudo mais aprofundado para nivelar os registros até o nível de aninhamento profundo (porque o nivelamento é feito no pacote jsonlite usandoflatten() função). Mas, no Sparklyr, não existe esse recurso disponível. Somente o nivelamento de 1º nível foi possível no Sparklyr.

Quero achatar os dados de diferentes tipos de dados e quero a saída no arquivo CSV.

sparklyr.shell.executor-memory' <- "20g" conf

Esforços realizados

Jsonlite usado. Mas é incapaz de ler arquivos grandes e também em pedaços. Demorou um tempo sem fim. Então, virei-me para o Sparklyr, pois ele se pergunta e lê 1 bilhão de registros em poucos segundos. Fiz um estudo mais aprofundado para nivelar os registros até o nível de aninhamento profundo (porque o nivelamento é feito no pacote jsonlite usandoflatten() função). Mas, no Sparklyr, não existe esse recurso disponível. Somente o nivelamento de 1º nível foi possível no Sparklyr.

Quero achatar os dados de diferentes tipos de dados e quero a saída no arquivo CSV.

sparklyr.shell.driver-memory' <- "20g" conf$spark.executor.cores <- 16 conf$spark.executor.memory <- "20G" conf$spark.yarn.am.cores <- 16 conf$spark.yarn.am.memory <- "20G" conf$spark.executor.instances <- 8 conf$spark.dynamicAllocation.enabled <- "false" conf$maximizeResourceAllocation <- "true" conf$spark.default.parallelism <- 32 sc <- spark_connect(master = "local", config = conf, version = '2.2.0') # Connection sample_tbl <- spark_read_json(sc,name="example",path="example.json", header = TRUE, memory = FALSE, overwrite = TRUE) sdf_schema_viewer(sample_tbl) # to create db schema

Esforços realizados

Jsonlite usado. Mas é incapaz de ler arquivos grandes e também em pedaços. Demorou um tempo sem fim. Então, virei-me para o Sparklyr, pois ele se pergunta e lê 1 bilhão de registros em poucos segundos. Fiz um estudo mais aprofundado para nivelar os registros até o nível de aninhamento profundo (porque o nivelamento é feito no pacote jsonlite usandoflatten() função). Mas, no Sparklyr, não existe esse recurso disponível. Somente o nivelamento de 1º nível foi possível no Sparklyr.

Quero achatar os dados de diferentes tipos de dados e quero a saída no arquivo CSV.

questionAnswers(1)

yourAnswerToTheQuestion