我有一个大型 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)探索窗口函数,但没有找到可以提供特定组值的数据框的方法。
请帮忙。
scala apache-spark apache-spark-sql spark-dataframe apache-spark-mllib
有没有办法使Web应用程序上下文案例不敏感?
基本上我在jboss-web.xml中执行以下操作
<jboss-web>
<context-root>cap</context-root>
</jboss-web>
Run Code Online (Sandbox Code Playgroud)
我可以通过localhost:8080/cap访问应用程序,但试图通过localhost:8080/Cap或localhost:8080/CAP访问它.有什么想法吗?
我可以使用以下方法填充Numberic和String类型列:
masterDF = masterDF.na.fill(-1)
masterDF = masterDF.na.fill("")
masterDF = masterDF.na.fill(-1.0)
Run Code Online (Sandbox Code Playgroud)
但我没有找到api来填充布尔类型列.我试过这个:masterDF = masterDF.na.fill(false)不支持.
有任何想法吗?