使用dotnet Spark从结构数组聚合属性

时间:2019-07-18 16:58:51

标签: apache-spark .net-spark

我正在尝试使用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。

0 个答案:

没有答案