2016-07-15 8 views
0

2つのデータフレーム、df1df2があります。新しい列を2番目の列に追加したいと思います。この新しい列は、最初のデータフレームからの列の平均である必要があります。このような何か:Spark(Java) - 単一の平均を新しい列として追加する

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"))); 

をしようとしています。これどうやってするの? ありがとうございました!

+0

操作を行う前に、両方のデータフレームに参加する必要があります。スパークはdf1をdf2に関連付ける方法を知らない。 –

+0

ああ結局、私は '.unionAll()'を1つのdfにしたいと思っていたので、退屈なようですが、同じ列がない限りはできません。 –

+0

私はあなたが試した問題だと思います解決するためにhttp://stackoverflow.com/a/29950853/702002と関連している –

答えて

1

それはDateFrameに関連する列を持つ必要があります)Append a column to Data Frame in Apache Spark 1.3

withColum(に似ていますので、あなたは、変換することができます:

  • calの平均値を
  • 新しい列を追加します元の値を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) 
    
+0

ああ! 'rand()* 0 + avgValue'は本当に単一の値からデータの列を生成するために賢いです。ありがとう!私は月曜日にそれをテストしますが、私はあなたにこれを信じてあなたの答えを受け入れます;) –

関連する問題