如何在火花数据集上进行一些操作不影响数据结构



我正在使用SPARK DATASET API删除重复项附近。我要做的是将重复的行分组,以便从每个组中留下一行,但用一列指定已折叠到此行的行数。

考虑以下示例。我有以下数据,其中最后一个字段指定的行折叠到该行中:

  • a,b,c,5
  • a,d,g,1

在这一点上,我想按第一个字段对数据进行分组,将行的其余部分保留在大多数行中,然后将大多数行倒入其中,然后将折叠的行数折叠到第二个行中。因此结果是:

  • a,b,c,6

我已经实施了它,问题是关于结果数据的格式。

这是我的代码:

val sameTitleArticlesCollapsed = articlesCollapsed.groupByKey(_.TITLE).reduceGroups((a,b) => if(a.TIMES_COLLAPSED > b.TIMES_COLLAPSED) a.copy(TIMES_COLLAPSED = a.TIMES_COLLAPSED + b.TIMES_COLLAPSED) else b.copy(TIMES_COLLAPSED = a.TIMES_COLLAPSED + b.TIMES_COLLAPSED)).toDF("key", "data")

如果我在sameTitleArticlesCollapsed上执行printSchema,则输出为:

root
|-- key: string (nullable = true)
|-- data: struct (nullable = true)
|    |-- CODE: string (nullable = true)
|    |-- TITLE: string (nullable = true)
|    |-- NAUTHORS: string (nullable = true)
|    |-- AUTHORS: string (nullable = true)
|    |-- TIMES_COLLAPSED: decimal(38,0) (nullable = true)

我不在乎key列,我想要的是在data列内提取数据以与应用groupByKey - reduceGroups之前的格式保持相同的格式。

root
 |-- CODE: string (nullable = true)
 |-- TITLE: string (nullable = true)
 |-- NAUTHORS: string (nullable = true)
 |-- AUTHORS: string (nullable = true)
 |-- TIMES_COLLAPSED: long (nullable = false)

我该怎么做?有什么更好的方法可以执行此过程吗?

谢谢!

您可以在末端添加图像,如下所示,以保留原始架构

val sameTitleArticlesCollapsed = articlesCollapsed.groupByKey(_.title).reduceGroups((a,b) => if(a.times_collapsed > b.times_collapsed) a.copy(times_collapsed = a.times_collapsed + b.times_collapsed) else b.copy(times_collapsed = a.times_collapsed + b.times_collapsed))
val result = sameTitleArticlesCollapsed.map({case (_,value) => value}).toDF
result.printSchema
root
 |-- code: string (nullable = true)
 |-- title: string (nullable = true)
 |-- nauthors: string (nullable = true)
 |-- authors: string (nullable = true)
 |-- times_collapsed: long (nullable = true)

相关内容

  • 没有找到相关文章

最新更新