【问题标题】:How to explode the dataset in JSON file by using explode functionality in R?如何使用 R 中的分解功能分解 JSON 文件中的数据集?
【发布时间】:2023-04-05 04:03:01
【问题描述】:

注意 - 我已经提到了answer,但是虽然数据是未嵌套的但我无法将数据转换成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)

数据库导航到: Data-0.5 MB 。然后将编号的项目复制到名为“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

我想通过分解功能来展平不同数据类型的数据。请不要使用其他包,因为使用 Sparklyr 包以外的其他包无法读取我的 10 亿数据。 Sparklyr 包仅在几分钟内读取了如此庞大的数据。

目标 - 此外,我希望将这些分解后的数据转换为正确的 csv 文件格式。

【问题讨论】:

    标签: r apache-spark nested explode sparklyr


    【解决方案1】:

    简而言之你有两个要求:

    • 预期架构。
    • 我希望将此未嵌套的数据转换为正确的 csv 文件格式。

    不兼容。 CSV 阅读器无法处理包括arrays 在内的复杂类型,对此问题和之前的问题中明确提出。

    要完全满足第二个要求,您必须使用以下之一

    • 序列化数组和结构,例如使用 JSON
    • 完全展开数据集,包括顶级数组字段,以实现整洁的格式。但是,这将显着增加数据量,因为您将获得length(hashtags) * length(media) * length(urls) 行的每条记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      相关资源
      最近更新 更多