首页 > 解决方案 > 如何取消嵌套数据并从 SparkR 中的数组中获取第一个元素?

问题描述

我是 SparkR 的新手,正在尝试数据准备的第一步。数据集就是这种东西。我试图对重要的列进行子集化和选择。我的问题是如何从数组元素中选择一列。我正在尝试这样的事情,它允许我通过取消嵌套数据来选择列,但不能取消嵌套和展平数组以获得它的第一个元素。有用的链接

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

标签: rapache-sparkdata-sciencesparkr

解决方案


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

  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,]

也请添加您的建议。


推荐阅读