Spark Scala - 在GroupBy DataFrame上应用ML / Complex函数

时间:2017-03-14 03:45:49

标签: scala apache-spark apache-spark-sql spark-dataframe apache-spark-mllib

我有一个大型DataFrame(Spark 1.6 Scala),如下所示:

Type,Value1,Value2,Value3,...
--------------------------
A,11.4,2,3
A,82.0,1,2
A,53.8,3,4
B,31.0,4,5
B,22.6,5,6
B,43.1,6,7
B,11.0,7,8
C,22.1,8,9
C,3.2,9,1
C,13.1,2,3

由此我想按类型分组并应用机器学习算法和/或对每个组执行复杂的功能。 我的目标是并行地对每个组执行复杂的功能。

我尝试了以下方法:

方法1)将Dataframe转换为Dataset,然后使用ds.mapGroups() api。但是这给了我每个组值的迭代器。 如果我想执行RandomForestClassificationModel.transform(dataset: DataFrame),我需要一个只包含特定组值的DataFrame。 我不确定将Iterator转换为mapGroups中的Dataframe是个好主意。

方法2)区分类型,然后映射它们,然后在地图循环中过滤每个类型:

val types = df.select("Type").distinct()
val ff = types.map(row => {
  val type = row.getString(0)    
  val thisGroupDF = df.filter(col("Type") == type)
  // Apply complex functions on thisGroupDF    
  (type, predictedValue)
})

出于某种原因,上面的内容永远不会完成(似乎正在进入某种无限循环)

方法3)探索窗口函数,但没有找到可以提供特定组值的数据框的方法。

请帮忙。

0 个答案:

没有答案