【问题标题】:Spark (Java) - Adding a single average as a new columnSpark (Java) - 添加单个平均值作为新列
【发布时间】:2016-07-15 14:45:23
【问题描述】:

我有两个数据框,df1 和 df2,我想在第二个数据框中添加一个新列。这个新列应该是第一个数据帧中一列的平均值。像这样的:

df1                  df2                   df2
userid count value   userid count          userid count value
11     2     5       10     1              10     1     5
22     3     4       20     1     ======>  20     1     5
33     5     6       30     1              30     1     5

我在努力

df2 = df2.withColumn("value", avg(df1.col("value")));

这不起作用。我怎样才能做到这一点? 谢谢!

【问题讨论】:

  • 您需要先加入两个数据框,然后才能进行任何操作。 Spark 不知道如何将 df1 与 df2 关联起来。
  • 哦。这似乎很乏味,因为最后我想将 .unionAll() 他们放到一个 df 中,但我不能这样做,直到他们有相同的列数......
  • 我认为您尝试解决的问题与stackoverflow.com/a/29950853/702002有关

标签: java apache-spark


【解决方案1】:

类似于Append a column to Data Frame in Apache Spark 1.3

withColum() 应该有一个与 DateFrame 相关的列,所以你可以进行转换:

  • 校准平均值
  • 添加新列时,将原始值设置为0,然后添加平均值

    import org.apache.spark.sql.functions._
    val avgValue = df1.select(avg(df1("value"))).collect()(0).getDouble(0)
    df2 = df2.withColumn("value", rand() * 0 + avgValue)
    

【讨论】:

  • 啊! rand() * 0 + avgValue 非常聪明地从单个值生成一列数据。谢谢!我会在星期一测试它,但我会相信你并接受你的回答;)
猜你喜欢
  • 2017-11-07
  • 2021-01-19
  • 2018-09-27
  • 2021-09-21
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2021-08-28
相关资源
最近更新 更多