我正在尝试使用培训和测试数据制作模型。 我想控制参数: 1.如果我通过控制台获得一个参数(一个文件路径),我想分割数据。 2.如果我得到两个参数(两个文件路径),一个是训练,另一个是测试数据。 3.其他情况,默认情况下取一个。
问题是在条件之前定义变量。我不知道它是如何工作的Some / Option / None句子,我得到并在此之后出错了一些步骤:
var dataTraining: Option[RDD[String]]=None
var dataTesting: Option[RDD[String]]=None
if(args.length==1){
val data=sc.textFile(args(0))
val splitData=data.randomSplit(Array(0.8,0.2),seed=11L)
(dataTraining,DataTesting)=(Some(splitData(0)),Some(splitData(1)))
}
else if(args.length==2){
dataTraining=Some(sc.textFile(args(0))
dataTesting=Some(sc.textFile(args(1))
}
else{
dataTraining=Some(sc.textFile("/ruta")
dataTesting=Some(sc.textFile("/ruta2")
}
我在这里没有收到任何错误,但是当我想尝试这样做:.map(_。split(','))时,intellij无法重新分配拆分功能。也许dataTraining / dataTesting的类型不正确。
¿我的错误是什么?
非常感谢!!
答案 0 :(得分:0)
简单模式匹配怎么样:
def main(args: Array[String]) = {
val (dataTraining, dataTesting) = args match {
case Array(p) =>
val splits = sc.textFile(p).randomSplit(Array(0.8,0.2),seed=11L)
(splits(0), splits(1))
case Array(p1, p2) => (sc.textFile(p1), sc.textFile(p2))
case _ => (sc.textFile("/ruta"), sc.textFile("/ruta"))
}
}
关于此问题,您最有可能仅将map
应用于Option
而不是RDD
。你需要这样的东西:
val optionRdd: Option[RDD[String]] = ???
optionRdd.map(_.map(_.split(",")))
其中外map
映射到Option
,内层映射到RDD
。