如何取消嵌套数据并从SparkR中的数组获取第一个元素?

时间:2018-07-03 11:23:45

标签: r apache-spark data-science sparkr

我是SparkR的新手,正在尝试数据准备的第一步。数据集属于此类。我试图子集并选择重要的列。我的问题是如何从数组元素中选择列。我正在尝试类似的操作,它允许我通过取消嵌套数据来选择列,但不能取消嵌套和展平数组以使其成为第一个元素。有用的Link

select.col <- SparkR::select(data,c("parsed.nid","parsed.status","parsed.sections.element[0].name"))

1 个答案:

答案 0 :(得分:1)

我自己找到了解决此问题的方法,可以通过两个简单的步骤完成:-

  1. 首先,我们需要在SparkR中使用explode()来获取其中的所有内容 该列中的列表。
  2. 接下来,我们需要在SparkR中使用windowPartitionBy()创建一个 分区,然后我们可以根据我们的需求得到任何东西 像row_number(),dense_rank(),rank()等要求。像这里一样,我们需要列表的第一个元素,因此我使用了row_number函数。

摘要:

    data.select <- SparkR::select(data,c("parsed.nid","parsed.status","parsed.sections"))
    names(data.select) <- c("nid","status","sections")
    categories <- SparkR::select(data.select,data.select$nid,data.select$status,explode(data.select$sections))
    ws <- SparkR::orderBy(SparkR::windowPartitionBy("nid","status","sections"),"nid")
    data.final <- SparkR::mutate(categories,row_num = over(row_number(), ws))
    ##If we want to get the first element of the array.
    data.final <- data.final[data.final$row_num==1,]

请同时添加您的建议。