[英]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
对每个数据集进行groupBy
和agg
,然后将它们连接在一起以解决 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.