如下面的代码所示,提供一个数据集(
df
,我的要求是能够添加派生列(
DerivedCol
)此列的值对于
idcol
一组行,由对另一列值应用谓词派生(
filter
这里),然后b)聚合函数(
max
在这里使用)在匹配组上。
val df = Seq(("id1","k1","7"),("id2","k1","5"),("id1","k3","2"),("id3","k1","4"),("id2","k5","1"),("id4","k5","1"))
.toDF("idcol","keycol","valcol")
val aggDf = df.filter($"keycol" === "k1")
.select($"idcol",$"valcol")
.groupBy($"idcol")
.agg(max($"valcol".cast(IntegerType)).cast(StringType).as("DerivedCol"))
.withColumnRenamed("idcol", "newidcol")
df.join(aggDf, df("idcol") === aggDf("newidcol"), "left_outer")
.drop(aggDf("newidcol"))
我正在使用
left outer join
为此。我的数据集非常庞大(数百万行)。我有以下问题:
-
是否有其他方法来实现这一点?
-
我应该使用什么分区逻辑来减少混乱?
的基数
伊多克
柱子很高。Spark版本为2.1.1。