Ich habe eine Reihe von Zahlen, die durch Kommas getrennt, wie gezeigt:mehrere aufeinanderfolgende Einträge in Scala/spark
a: {108.109.110.112.114.115.116.118}
ich brauche die Ausgabe etwa wie folgt:
a: {108-110, 112, 114-116, 118}
Ich versuche die fortlaufenden Nummern mit "-" dazwischen zu gruppieren. Zum Beispiel 108.109.110 sind fortlaufende Nummern, so dass ich 108-110 bekomme. 112 ist ein separater Eintrag; 114,115,116 stellt wieder eine Sequenz dar, also bekomme ich 114-116. 118 ist getrennt und als solches behandelt.
Ich mache das in Spark. Ich schrieb den folgenden Code:
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))
Ich erhalte die Ausgabe wie folgt:
a: {108-108, 109-109, 110-110, 112, 114-114, 115- 115, 116-116, 118}
Ich bin nicht in der Lage herauszufinden, wo ich falsch liege. Können Sie mir bitte helfen, dies zu korrigieren? TIA.
Bitte erläutern Sie die Regeln, die zu Ihrer erwarteten Ausgabe führen. Und das hängt nicht wirklich mit Funken zusammen, es ist nur ein Skalaproblem –
@RaphaelRoth Ich habe die Regel in meiner Frage bearbeitet. –