如何使用相同的聚合DataFrame将DataFrame连接到e

时间:2017-01-25 21:58:57

标签: apache-spark spark-dataframe

给定一个DataFrame

+---+---+----+
| id|  v|date|
+---+---+----+
|  1|  a|   1|
|  2|  a|   2|
|  3|  b|   3|
|  4|  b|   4|
+---+---+----+

我们想要添加一个日期平均值为v

的列
+---+---+----+---------+
|  v| id|date|avg(date)|
+---+---+----+---------+
|  a|  1|   1|      1.5|
|  a|  2|   2|      1.5|
|  b|  3|   3|      3.5|
|  b|  4|   4|      3.5|
+---+---+----+---------+

有没有更好的方法(例如在表现方面)?

val df = sc.parallelize(List((1,"a",1), (2, "a", 2), (3, "b", 3), (4, "b", 4))).toDF("id", "v", "date")
val aggregated = df.groupBy("v").agg(avg("date"))
df.join(aggregated, usingColumn = "v")

更确切地说,我认为这次加入会引发一场洗牌。

[更新]添加一些精确度,因为我不认为它是重复的。在这种情况下,联接有一个关键。

我可以选择不同的方法来避免它:

  • 自动的。 Spark有一个automaticBroadcastJoin,但它需要计算Hive元数据。对吗?
  • 使用已知的分区程序?如果是,那么如何使用DataFrame。
  • 强迫广播(leftDF.join(广播(rightDF),usingColumn =“v”)?

0 个答案:

没有答案