将数据帧拆分为数组scala

时间:2016-08-15 14:37:32

标签: arrays scala split spark-dataframe

我正在尝试根据其ID将Dataframe拆分为多个数组。

所以我有一张桌子

id|name
12|a
12|b
12|c
13|z
13|y
13|z

我希望得到多个看起来像的矢量:

<a,b,c> <x,y,z> 

所以我设法使用以下方法获取所有不同的ID:

val ids=dataframe.select("id").distinct.collect.flatMap(_.toSeq)

那将返回12和13。 我试图为他们每个人找到名字:

val namesArray=ids.map(id=>dataframe.where($"id"===id))

但这似乎不是因为它返回列名,我应该找到一种方法只从中获取名称。

1 个答案:

答案 0 :(得分:1)

如果您的数据已经有DataSet,那么您可以执行以下操作,

val yourDataSet = sc.parallelize(List((12, "a"), (12, "b"), (13, "y"), (13, "z"))).toDF("id", "val")

val requiredDataSet = yourDataSet
  .groupBy("id")
  .agg(collect_list("val"))
  .select("collect_list(val)")

或者你可以通过获取底层的Rdd然后转换它来实现这一点。

val vaueVectorRdd = dataframe.rdd
  .map(row.getInt(0), row.getString(1))
  .groupByKey({ case (k, v) => k })
  .map({ case (k, iter) => iter.map(_._2).toVector })