これは、この入力ファイルを考えると、スパーク2.1である:Sparkデータフレームのネストされた配列の構造体の値を合計するにはどうすればよいですか?
order.json
{"id":1,"price":202.30,"userid":1} {"id":2,"price":343.99,"userid":1} {"id":3,"price":399.99,"userid":2}
そして、次のデータフレーム:
val order = sqlContext.read.json("order.json")
val df2 = order.select(struct("*") as 'order)
val df3 = df2.groupBy("order.userId").agg(collect_list($"order").as("array"))
DF3は以下の内容を持っています:
+------+---------------------------+
|userId|array |
+------+---------------------------+
|1 |[[1,202.3,1], [2,343.99,1]]|
|2 |[[3,399.99,2]] |
+------+---------------------------+
と構造:私はuserIdをごとにアレイを有するを利用して、各useridにarray.priceの合計を計算したい
:
root |-- userId: long (nullable = true) |-- array: array (nullable = true) | |-- element: struct (containsNull = true) | | |-- id: long (nullable = true) | | |-- price: double (nullable = true) | | |-- userid: long (nullable = true)
は、今私がDF3を与えられていますと仮定行。
結果のデータフレームの新しい列にこの計算を追加します。私がdf3.withColumn( "sum"、lit(0))を行ったが、lit(0)を私の計算に置き換えた場合のように。
私は両方のことに執着しています。私は配列全体にアクセスするための方法は見つけられませんでした(例えばfoldLeftを使って)。