0

Spark で次のスカラ コードを実行しようとしていますが、何らかの理由で関数選択が呼び出されません。

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 は、spark コンテキスト オブジェクトです。

4

2 に答える 2

3

これをlocalモードまたはクラスターで実行していますか? に渡された関数lines.mapは Spark ワーカーによって評価されるため、クラスターで実行している場合は println がワーカーの stdout ログに表示されます (これらのログは Spark の Web UI を介して表示できます)。

于 2013-10-31T02:33:08.120 に答える
1

この関数はコンパイルされません。構文

{
  some statement
  case ... => ...

有効じゃない。Case ステートメントは次のようにのみ表示できます。

{
   case ... => ...
       ...
   case ... => ...
       ...
}

明らかにコンパイルするものprintlnがあるので、その前にcase ステートメントがあり、その case ステートメントが選択されていないに違いありません。

于 2013-10-31T02:47:36.393 に答える