Как взорвать набор данных в файле JSON с помощью функции разнесения в R? - PullRequest
0 голосов
/ 06 октября 2018

Примечание - я сослался на ответ , но, хотя данные не вложены, но я не смог преобразовать данные в формат файла CSV.

Я хочу сгладить данные разных типов данных с помощью функции разнесения .Набор данных содержит массивы и структуру.Я хочу разобрать данные, чтобы потом преобразовать их в формат файла CSV.

Введение

Код R написан с использованием пакета Sparklyr для создания схемы базы данных. [Воспроизводимый код и база данных приведены]

Существующий результат

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)

Я хочу сгладить эту структуру, как показано ниже,

Ожидаемый результат

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)

База данных Перейдите к: Данные-0,5 МБ .Затем скопируйте пронумерованные элементы в текстовый файл с именем «example».Сохраните в каталог с именем "../example.json/", созданный в вашем рабочем каталоге.

Код R написан для воспроизведения примера, как показано ниже:

Выход из кода

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$'sparklyr.shell.executor-memory' <- "20g"
conf$'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

Я хочу сгладить данные разных типов данных с помощью функции разнесения.Пожалуйста, не используйте другой пакет, потому что мои 1 миллиард данных не читаются при использовании пакета, отличного от Sparklyr.Пакет Sparklyr считывает эти огромные данные только в течение нескольких минут.

Цель - Далее я хочу, чтобы эти разнесенные данные были преобразованы в правильный формат файла CSV.

1 Ответ

0 голосов
/ 07 октября 2018

Короче говоря, у вас есть два требования:

  • Ожидаемая схема.
  • Я хочу преобразовать эти вложенные данные в правильный формат файла CSV.

Не совместимы.CSV-ридер не может обрабатывать сложные типы, включая arrays, для которых четко задаются в этом и предыдущих вопросах.

Чтобы полностью удовлетворить второе требование, вам придется использовать один из следующих

  • Сериализация массива и структур, например, с использованием JSON
  • Полное развертывание набора данных, включая поля массива верхнего уровня, для достижения аккуратного формата. Однако это значительно увеличит объем данных для каждой получаемой записи.length(hashtags) * length(media) * length(urls) строк.
...