我正在尝试在Spark上执行以下scala代码,但是由于某种原因,函数选择性没有被调用
var lines = sc.textFile(inputPath+fileName,1)
val lines2 =lines.map(l=>selective(
func,List(2,3),List(1,26),l,";",0
))
lines2.toArray().foreach(l=>out.write(l))
.......
选择性功能定义如下
def selective(f: (String,Boolean) => String , phoneFields: Seq[Int], codeFields: Seq[Int], in: String, delimiter:String, iMode:Int /* 0 for enc, 1 for dec */) :String =
in.split(delimiter,-1).zipWithIndex
.map {
case (str, ix)
if( phoneFields.contains(ix)||codeFields.contains(ix)) =>
var output=f(str,codeFields.contains(ix))
var sTemp=str+":"+output+"\n"
if((iMode==0)&&codeFields.contains(ix)&&(str.compareTo("")!=0) )
CodeDictString+=sTemp
else if(str.compareTo("")!=0)
PhoneDictString+=sTemp
output
case other => other._1
}.mkString(";").+("\n")
println语句未执行。此外,该功能不会返回任何东西。 sc是火花上下文对象
答案 0 :(得分:3)
您是在local
模式下运行还是在群集上运行?传递给lines.map
的函数由Spark工作人员评估,因此如果您在群集上运行,println将出现在worker的stdout日志中(这些日志可通过Spark的Web UI查看)。
答案 1 :(得分:1)
此函数无法编译。语法
{
some statement
case ... => ...
无效。案例陈述仅如下所示:
{
case ... => ...
...
case ... => ...
...
}
由于您显然需要某些进行编译,我打赌在println
之前有一个案例陈述,并且没有选择该案例陈述。