0
這是星火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}
而下面dataframes:
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]] |
+------+---------------------------+
和結構:
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:
我想計算array.price的總和爲每個用戶id,同時具有每用戶id陣列的優點行。
我會將此計算添加到生成的數據框的新列中。就像我做了df3.withColumn(「sum」,點亮(0)),但點亮(0)代替我的計算。
它會假設是直截了當的,但我堅持兩個。我沒有找到任何方法來訪問整個數組每行的計算(例如foldLeft)。