我正在尝试使用UDF从结构数组中聚合一个属性,并将其添加为新列。
root
|-- applicationNumber: string (nullable = true)
|-- customerInfo: struct (nullable = true)
| |-- contactNumber: string (nullable = true)
| |-- firstName: string (nullable = true)
| |-- lastName: string (nullable = true)
|-- applications: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- seller: string (nullable = true)
| | |-- msrp: long (nullable = true)
| | |-- houseModel: string (nullable = true)
代码:
Func<Column, Column> operationAggregate = Udf<StructType[], decimal>((list) =>
{
Console.WriteLine("aggregating");
Console.WriteLine(list);
// process list here, and use LINQ sum
return 0;
});
df = df.WithColumn("totalPrice", operationAggregate(df["applications"]));
但是,由于无法确定UDF的正确输入类型,因此我不确定这是否是进行聚合的正确方法。此UDF引发错误:
System.InvalidCastException:无法转换类型的对象 “ Microsoft.Spark.Sql.RowConstructor”键入“ System.Object []”。
似乎找不到这样的示例来聚合嵌套数组。 有一个scala example,但我不知道它等同于dotnet。