2016-04-25 10 views

答えて

-1

は、異なる長さのユニークサブ配列にそれを分割し、inital文字列を取ってみ長さL = 2場合は、文字列S = AATTGTGTGTGTGATTTTTTAATG考えると、最小サポートが5で、その後、頻繁に連続したサブシーケンスが

ですそれらの上にインアーialシーケンスをブロードキャストし、フィルタリングを一致させる。このような何かspark-shell

val s = "AATTGTGTGTGTGATTTTTTAATG" //your string 

val s_broadcast = sc.broadcast(s) //broadcast version 

val A = 2 // min length of substring 
val B = 3 // max length of substring 
val C = 3 // min support 
val L = s.size //length of the string 

sc.parallelize(
    for{ 
     i <- A to B 
     j <- 0 to (L - i) 
    } yield (j,i+j) 
) // generating paris of substrings 
.map{case(j,i)=>s_broadcast.value.substring(j,i)} 
.distinct // if optimization is needed, this step is a place to start 
.filter(x=>s_broadcast.value.indexOf(x*C)>=0) 
.collect 
.map(_*C) 

で編集作業になりますよう しかし後には - ここで最長の部分文字列を返しますコードです。前のコードにはCが固定されていますが、これは最も長く試行されます。

val s = "AATTGTGTGTGTGTGATTTTTTAATG" //your string 

val s_broadcast = sc.broadcast(s) //broadcast version 

val A = 2 // min length of substring 
val B = 3 // max length of substring 
val C = 3 // min support 
val L = s.size //length of the string 

sc.parallelize(
    for{ 
     i <- A to B 
     j <- 0 to (L - i) 
    } yield (j,i+j) 
) // generating paris of substrings 
.map{case(j,i)=>s_broadcast.value.substring(j,i)} 
.distinct // if optimization is needed, this step is a place to start 
.flatMap(x=> 
    for{ 
     v <- C to L/A 
    } yield x->v 
) //making "AB"->3 pairs, which will result in search for "ABABAB" 
.filter{case(x,v)=>s_broadcast.value.indexOf(x*v)>=0} 
.groupByKey //grouping same substrings of different length 
.map{case(k,v)=>k->v.max} //getting longer substring 
.collect //bringing substring to the driver 
.map{case(k,v)=>k*v} 
+0

このコードの出力はArray(TT、GT、TG)であり、入力文字列s = AATTGTGTGTGTGATTTTTATATGの連続したサブシーケンスではありません。 – Abims

+0

最後の行に '.map(_ * C)'を追加しました – avloss

+0

大変感謝していますが、val s = sc.textFile( "file:/// tmp/input")を使ってローカルマシンから自分の入力を取得しようとしています。 txt ")とval s_broadcast = sc.broadcast(" file:///tmp/input.txt ")のブロードキャスト変数にエラーがあります。java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です。コード内のmap {case(j、i)=> s_broadcast.value.substring(j、i)}。私はエラーを修正するにあなたの助けを感謝します。 – Abims

関連する問題