Sud*_*yam 5 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
Run Code Online (Sandbox Code Playgroud)
由此我想按类型分组并应用机器学习算法和/或对每个组执行复杂的功能。我的目标是在每个组上并行执行复杂的功能。
我尝试了以下方法:
方法1)将Dataframe转换为Dataset,然后使用ds.mapGroups()
api。但这给了我每个组值的迭代器。如果我想执行RandomForestClassificationModel.transform(dataset: DataFrame)
,我需要一个只有特定组值的 DataFrame。我不确定在 mapGroups 中将 Iterator 转换为 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)
})
Run Code Online (Sandbox Code Playgroud)
出于某种原因,上述内容永远不会完成(似乎进入某种无限循环)
方法3)探索窗口函数,但没有找到可以提供特定组值的数据框的方法。
请帮忙。
归档时间: |
|
查看次数: |
653 次 |
最近记录: |