我想将数据帧的字符串列转换为列表.我可以从DataframeAPI 找到的是RDD,所以我尝试先将其转换回RDD,然后将toArray函数应用于RDD.在这种情况下,长度和SQL工作就好了.但是,我从RDD得到的结果在每个元素周围都有方括号[A00001].我想知道是否有适当的方法将列转换为列表或删除方括号的方法.
任何建议,将不胜感激.谢谢!
我正在努力保存ML Pipeline生产的数千种型号.正如在答复中指出这里,该机型可以保存如下:
import java.io._
def saveModel(name: String, model: PipelineModel) = {
val oos = new ObjectOutputStream(new FileOutputStream(s"/some/path/$name"))
oos.writeObject(model)
oos.close
}
schools.zip(bySchoolArrayModels).foreach{
case (name, model) => saveModel(name, Model)
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用s3://some/path/$name,/user/hadoop/some/path/$name因为我希望模型最终保存到亚马逊s3,但它们都失败,并显示无法找到路径的消息.
如何将模型保存到Amazon S3?
我正在尝试使用Spark Scala API在大型模型输入csv文件上按组(School_ID,超过3,000)构建随机森林模型.每组包含约3000-4000条记录.我拥有的资源是20-30 aws m3.2xlarge实例.
在R中,我可以按组构建模型并将它们保存到这样的列表中 -
library(dplyr);library(randomForest);
Rf_model <- train %>% group_by(School_ID) %>%
do(school= randomForest(formula=Rf_formula, data=., importance = TRUE))
Run Code Online (Sandbox Code Playgroud)
列表可以存储在某个地方,我可以在需要使用它们时调用它们,如下所示 -
save(Rf_model.school,file=paste0(Modelpath,"Rf_model.dat"))
load(file=paste0(Modelpath,"Rf_model.dat"))
pred <- predict(Rf_model.school$school[school_index][[1]], newdata=test)
Run Code Online (Sandbox Code Playgroud)
我想知道如何在Spark中做到这一点,无论我是否需要首先按组分割数据以及如何在必要时有效地进行分割.
我能够根据以下代码通过School_ID拆分文件,但似乎它为每次迭代创建了一个单独的作业子集,并且需要很长时间才能完成作业.有没有办法一次性完成?
model_input.cache()
val schools = model_input.select("School_ID").distinct.collect.flatMap(_.toSeq)
val bySchoolArray = schools.map(School_ID => model_input.where($"School_ID" <=> School_ID))
for( i <- 0 to programs.length - 1 ){
bySchoolArray(i).
write.format("com.databricks.spark.csv").
option("header", "true").
save("model_input_bySchool/model_input_"+ schools(i))
}
Run Code Online (Sandbox Code Playgroud)
来源: 如何在SCALA和SPARK中将数据框拆分为具有相同列值的数据框
编辑8/24/2015 我正在尝试将我的数据帧转换为随机林模型接受的格式.我正在遵循此线程上的说明 如何在Spark ML中创建用于分类的正确数据帧
基本上,我创建了一个新变量"label"并将我的类存储在Double中.然后我使用VectorAssembler函数组合我的所有功能,并将我的输入数据转换如下 -
val assembler = new VectorAssembler().
setInputCols(Array("COL1", "COL2", "COL3")).
setOutputCol("features")
val model_input = assembler.transform(model_input_raw). …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Spark DataFrame API 将我的数据框从长到宽重塑。数据集是学生提问的问题和答案的集合。这是一个巨大的数据集,Q(问题)和 A(答案)大约范围从 1 到 50000。我想收集所有可能的 Q*A 对并使用它们来构建列。如果学生对问题 1 的回答为 1,我们将值 1 分配给第 1_1 列。否则,我们给它一个0。数据集已经在S_ID、Q、A上进行了去重。
在 R 中,我可以简单地使用库 reshape2 中的 dcast,但我不知道如何使用 Spark 来做到这一点。我在下面的链接中找到了旋转的解决方案,但它需要固定数量的不同对的 Q*A。 http://rajasoftware.net/index.php/database/91446/scala-apache-spark-pivot-dataframes-pivot-spark-dataframe
我还尝试使用用户定义的函数连接 Q 和 A,并应用交叉表但是,我从控制台收到以下错误,即使到目前为止我只在示例数据文件上测试我的代码 -
The maximum limit of le6 pairs have been collected, which may not be all of the pairs.
Please try reducing the amount of distinct items in your columns.
Run Code Online (Sandbox Code Playgroud)
原始数据:
S_ID、Q、A
1、1、1
1、2、2
1、3、3
2、1、1
2、2、3
2、3、4
2、4、5
=> 长到宽变换后:
S_ID、QA_1_1、QA_2_2、QA_3_3 、QA_2_3、QA_3_4、QA_4_5 1、1、1、1、0、0、0
2、1、0、0、1、1、1
R code.
library(dplyr); library(reshape2); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ML管道和DataFrame API从逻辑模型中提取预测概率.预测概率的输出是列向量,其存储每个类(0,1)的预测概率,如下所示.我想知道如何只提取1级的概率.谢谢!
prob
"[0.13293408418007766,0.8670659158199223]"
"[0.1335112097146626,0.8664887902853374]"