繁体   English   中英

基于一列的相同输入并连接其他列的火花合并数据集

[英]spark merge datasets based on the same input of one column and concat the others

目前我有几个Dataset[UserRecord] ,它看起来像这样

case class UserRecord(
  Id: String,
  ts: Timestamp,
  detail: String
)

让我们将几个数据datasets称为datasets 以前我试过这个

datasets.reduce(_ union _)
  .groupBy("Id")
  .agg(collect_list("ts", "detail"))
  .as[(String, Seq[DetailRecord]]

但是这段代码给了我一个 OOM 错误。 我认为根本原因是collect_list

现在我在考虑是否可以groupBy对每个数据集进行groupByagg ,然后将它们连接在一起以解决 OOM 问题。 也欢迎任何其他好的建议:)

我有一个IndexedSeq的数据集看起来像这样

|name|   lists      |
| x  |[[1,2], [3,4]]|

|name|   lists      |
| y  |[[5,6], [7,8]]|

|name|   lists         |
| x  |[[9,10], [11,12]]|

我怎样才能把它们结合起来得到一个看起来像的Dataset

|name|          lists               |
| x  |[[1,2], [3,4],[9,10], [11,12]]|
| y  |[[5,6], [7,8]]                |

我试过ds.reduce(_ union _)但它似乎没有用

您可以在联合后聚合:

val ds2 = ds.reduce(_ unionAll _).groupBy("name").agg(flatten(collect_list("lists")).as("lists"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM