在Spark 1.6.2中聚合类似的记录

时间:2018-02-14 05:50:09

标签: scala apache-spark apache-spark-sql

我有一个数据集,在使用 scala 中的 Spark SQL(1.6.2)进行一些转换后,我得到了以下数据。 (部分数据)。

home

现在我想得到最终结果,比如聚合类似的awayhome,即a和b出现两次。类似的awayhome away count a b 160 c d 50 e f 75 可能并不总是连续的行

$value = p * abs(log(0.15 * (m - 2)));

有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

您可以使用arraysort_array创建一个临时列,您可以使用groupBy来解决此问题。在这里,我假设在home / away列中最多可以有两行具有相同的值,而home中的值与away中的值不一致&# 39;重要的是:

val df = Seq(("a", "b", 90),
             ("b", "a", 70),
             ("c", "d", 50),
             ("e", "f", 45),
             ("f", "e", 30)).toDF("home", "away", "count")

val df2 = df.withColumn("home_away", sort_array(array($"home", $"away")))
  .groupBy("home_away")
  .agg(sum("count").as("count"))
  .select($"home_away"(0).as("home"), $"home_away"(1).as("away"), $"count")
  .drop("home_away")

会给:

+----+----+-----+
|home|away|count|
+----+----+-----+
|   e|   f|   75|
|   c|   d|   50|
|   a|   b|  160|
+----+----+-----+