2016-08-23 2 views
0

私は、キーと値のペアでgroupByKeyを使用していた私だタイプの出力[(文字列、反復処理可能[文字列])]のApache-スパーク:関数にパラメータとして反復処理可能[文字列]を渡す方法

私が呼び出しています上記の出力上のマップ変換に関数が宣言されていますが、関数宣言でエラーが発生しています。

def getStr (uid : String, locations : Array[]) : String = { 
    return "test" 
} 

Iterable [String]を関数パラメータとして使用する方法がわかりません。

答えて

0

RDDはRDD[(String, Iterable[String])]型を持つ場合、そのレコードをマップするためにあなたはRDDのレコードの同じタイプの単一の引数を受け取る機能、すなわち必要があります:あなたは迷っている場合は

def getStr(record: (String, Iterable[String])): String = { "test" } 

を何Iterableで行うことができます - docsを参照してください。

最も簡単なアプローチ(必ずしも最高のパフォーマンスを発揮するとは限りません)は、リストに変換してより豊かなAPIを得ることがあります。それが空の場合、イテレータの最初の項目、またはデフォルト値を取得する:OPは、我々は彼が何をしたいのかわからない場合は反復可能に `toList`を使用する必要がある場合

def getStr(record: (String, Iterable[String])): String = record match { 
    case (s, iter) => iter.toList.headOption.getOrElse("UNKNOWN") 
} 
+0

はどのように我々は知っているだろうそれ?つまり、Iterable [String]が大きい場合、不要なO(n)演算がありますが、理由はありません。 –

+1

すべてtrueです - 私は、OPが主に 'getStr'のシグネチャに関係していると仮定しています。残りは、パフォーマンス免責を含めて、そのようなシグネチャをどのように使用できるかを見る実装のための単なる例です...私は'しかし、ここで危険なヒントになるかもしれない。 –

+0

返答ありがとうございます。getStr関数でレコード[String]にアクセスし、[Iterable]を記録するにはどうすればいいですか? –

関連する問題