注意- 我已经参考了答案,但是虽然数据是非嵌套的,但我无法将数据转换为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 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
我想通过使用分解功能来展平不同数据类型的数据。请不要使用其他包,因为我的 10 亿个数据无法使用 Sparklyr 包以外的其他包读取。Sparklyr软件包只能在几分钟内读取这些庞大的数据。
目标- 此外,我希望这些分解的数据转换为正确的csv文件格式。
简而言之,您有两个要求:
- 预期的架构。
- 我希望这个非嵌套数据转换为正确的csv文件格式。
不兼容。CSV阅读器无法处理复杂的类型,包括arrays
,在此和前面的问题中明确提出。
要完全满足第二个要求,您必须使用以下方法之一
- 序列化数组和结构,例如使用 JSON
- 完全分解数据集,包括顶级数组字段,以实现整洁的格式。但是,这将显着增加每条记录的数据量,您将获得
length(hashtags) * length(media) * length(urls)
行。