首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sparklyr如何查看变量

Sparklyr如何查看变量
EN

Stack Overflow用户
提问于 2018-02-19 23:40:17
回答 1查看 1.5K关注 0票数 1

嗨,我有一个嵌套很深的json文件。我使用sparklyr读取这个json文件,并将其命名为"data“对象。

首先,我将展示数据结构:

代码语言:javascript
复制
# Database: spark_connection
data
    -a : string
    -b : string
    -c : (struct)
       c1 : string
       c2 : (struct)
          c21: string
          c22: string

就像这样。因此,如果我使用以下命令提取"a“:

代码语言:javascript
复制
data %>% sdf_select(a)

我可以查看里面的数据,比如:

代码语言:javascript
复制
   # Database: spark_connection
   a
   <chr>
1  Hello world
2  Stack overflow is epic

现在的问题是,当我使用sdf_select()一个更深层次的结构时。

代码语言:javascript
复制
data %>% sdf_select(c.c2.c22)

查看里面的数据,我得到了这个

代码语言:javascript
复制
  # Database: spark_connection
  c22
  <list>
1 <list [1]>
2 <list [1]>
3 <list [1]>
4 <lgl [1]>

因此,如果我收集数据,使spark数据帧变成R数据帧,并使用命令查看数据

代码语言:javascript
复制
View(collect(data %>% sdf_select(c.c2.c22)))

数据显示

代码语言:javascript
复制
1 list("Good")
2 list("Bad")
3 NA

如何将上述每个列表中的每个条目转换为数据框表,使其仅显示Good,Bad,NA,而不是list("")?

EN

回答 1

Stack Overflow用户

发布于 2018-03-21 23:38:34

我无法重现这段视频。我用过

代码语言:javascript
复制
[{"a":"jkl","b":"mno","c":{"c1":"ghi","c2":{"c21":"abc","c22":"def"}}}]

写入test.json,后跟

代码语言:javascript
复制
spk_df <- spark_read_json(sc, "tmp", "file:///path/to/test.json")
spk_df %>% sdf_schema_viewer()

这似乎与您提供的模式相匹配。然而,当我使用sparklyr.nested::sdf_select()时,我得到了不同的结果。

代码语言:javascript
复制
spk_df %>% sdf_select(c.c2.c22)
# # Source:   table<sparklyr_tmp_7431373dca00> [?? x 1]
# # Database: spark_connection
#   c22  
#   <chr>
# 1 def

其中c22是一个字符列。

我的猜测是,在您的实际数据中,其中一个级别实际上是一个结构数组。如果是这种情况,那么索引到数组中将强制列表换行(否则数据将需要删除)。您可以使用sdf_explode在spark land中解决此问题,也可以通过多种方式在本地解决此问题。例如,使用purrr时,您将执行以下操作:

代码语言:javascript
复制
df <- collect(spk_df)
df %>% mutate(c22=purrr::map(c22, ~unlist))

您可能需要编写一个包装unlist的函数来处理不同行中的不同数据类型( NA值是逻辑的)。

代码语言:javascript
复制
unlist_and_cast <- function(x) {
  as.charater(unlist(x))
}

df %>% mutate(c22=purrr::map(c22, ~unlist_and_cast))

会做我认为的把戏(未经测试)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48869472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档