I有し示すようにカンマで区切られた数字の配列:スパーク/ Scalaで複数の順次エントリを合わせ
:
:{108,109,110,112,114,115,116,118}
私はこのような出力のものが必要
:{108-110、112、114-116、118}
私は間に " - "を付けて連続番号をグループ化しようとしています。 たとえば、108,109,110は連続した数字なので、108〜110になります。 112は別のエントリです。 114,115,116は再びシーケンスを表しているので、私は114-116を得る。 118は別個であり、そのまま扱われる。
私はこれをスパークで行っています。
import scala.collection.mutable.ArrayBuffer
def Sample(x:String):ArrayBuffer[String]={
val x1 = x.split(",")
var a:Int = 0
var present=""
var next:Int = 0
var yrTemp = ""
var yrAr= ArrayBuffer[String]()
var che:Int = 0
var storeV = ""
var p:Int = 0
var q:Int = 0
var count:Int = 1
while(a < x1.length)
{
yrTemp = x1(a)
if(x1.length == 1)
{
yrAr+=x1(a)
}
else
if(a < x1.length - 1)
{
present = x1(a)
if(che == 0)
{
storeV = present
}
p = x1(a).toInt
q = x1(a+1).toInt
if(p == q)
{
yrTemp = yrTemp
che = 1
}
else
if(p != q)
{
yrTemp = storeV + "-" + present
che = 0
yrAr+=yrTemp
}
}
else
if(a == x1.length-1)
{
present = x1(a)
yrTemp = present
che = 0
yrAr+=yrTemp
}
a = a+1
}
yrAr
}
val SampleUDF = udf(Sample(_:String))
次のように私は出力を取得しています:
:{108から108まで、109から109まで、110から110、112、114-114、115-私は、次のコードを書きました115,116-116,118}
私はどこに間違っているのか分かりません。これを修正するのを手伝ってください。 TIA。ここ
期待される出力につながるルールを説明してください。そして、これは本当に火花に関連するものではなく、ちょうどscalaの問題です。 –
@RaphaelRoth私は自分の質問でルールを編集しました。 –