Scala 如何在不影响数据结构的情况下对Spark数据集执行某些操作?

Scala 如何在不影响数据结构的情况下对Spark数据集执行某些操作?,scala,apache-spark,duplicates,spark-dataframe,Scala,Apache Spark,Duplicates,Spark Dataframe,我正在使用spark数据集API删除几乎重复的数据。我要做的是对重复的行进行分组,以便每个组只留下一行,但有一列指定已折叠到此行中的行数 考虑下面的例子。我有以下数据,其中最后一个字段指定折叠到该行中的行: A、 B、C、5 A、 D,G,1 此时,我希望按第一个字段对数据进行分组,保留行中大多数行折叠到其中的其余字段,并将折叠到第二个字段中的行数添加到第一个字段中。因此,结果将是: A、 B、C、6 我已经实现了它,问题是结果数据的格式 这是我的密码: val sameTitleArt

我正在使用spark数据集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)
我不关心
列,我想提取
数据
列中的数据,使其保持与应用
groupByKey-reducegroup
之前相同的格式

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)