如何在 Apache Spark 中的 Group By Operation 形成的每个子集上应用用户定义函数?

Posted

技术标签:

【中文标题】如何在 Apache Spark 中的 Group By Operation 形成的每个子集上应用用户定义函数?【英文标题】:How to apply User Defined Function on each subset formed by a Group By Operation in Apache Spark? 【发布时间】:2016-06-19 18:10:33 【问题描述】:

我有一个如下所示的数据框:

    [ID_number,cust_number,feature1,feature2,feature3,....]

现在我想编写一个按 ID_number 分组的查询,并在子集上应用用户定义函数

    [cust_number,feature1,feature2,feature3,......]

按每个 ID_number 分组 我需要对特征应用机器学习算法并以某种方式存储权重。

如何使用 Apache Spark DataFrames(使用 Scala)做到这一点?

【问题讨论】:

How can I define and use a User-Defined Aggregate Function in Spark SQL?的可能重复 【参考方案1】:

你可以做这样的事情(pyspark)。

schema_string = "cust_number,feature1,feature2,feature3"

fields = [StructField(field_name, StringType(), True) for field_name in schema_string.split(",")]

schema = StructType(字段) df = sql_context.createDataFrame(group_by_result_rdd, schema);

注意:这里我假设您的所有功能都是字符串类型。 查看其他数据类型的 API 文档

【讨论】:

以上是关于如何在 Apache Spark 中的 Group By Operation 形成的每个子集上应用用户定义函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用group by聚合spark中的结构数组

org.apache.spark.sql.AnalysisException:表达式 't2.`sum_click_passed`' 既不在 group by 中,也不是聚合函数

Q HPX 与“apache 云计算”(例如 vs spark)如何公平?

如何解决 Spark 中的“aggregateByKey 不是 org.apache.spark.sql.Dataset 的成员”?

如何确定 Apache Spark 数据帧中的分区大小

如何在 Scala 中将数据帧转换为 Apache Spark 中的数据集?