2016-08-04 10 views
0

Ich habe eine Spalte in meinem DataFrame, die Werte wie 99 230/256 enthält. Es ist ein String mit einem Bruchteil. Es ist doppelte Darstellung ist 99.8984375.String (mit Bruch) zu Double in Spark

Wie kann ich eine Umwandlung anwenden, die solche Strings in Double in Spark konvertiert? Ich benutze Spark 1.6.2

+1

Sie müssen ein UDF erstellen, um es zu parsen, den Bruchwert zu berechnen und ein Doppel zurückzugeben. – eliasah

+0

Ja. Ich stimme zu. Ich habe nachgesehen, ob dies mit vordefinierten Methoden möglich ist, aber Sie haben Recht. – Veenit

Antwort

2

Hinweis: Sie müssen Ihre eigene Funktion definieren, um auf die Daten anzuwenden. Spark verwendet das nur, es ist keine eingebaute Funktion, um das zu tun, was Sie fragen.

Da Sie nicht angeben, welche API Sie verwenden, ist hier eine Python-Antwort über eine einfache Sammlung.

Auch Sie können dies vollständig außerhalb von Spark ausführen und testen.

def convertFrac(frac): 
    parts = frac.split() 
    whole = numer = 0 
    denom = 1 
    if len(parts) == 2: 
     whole = float(parts[0]) 
     numer, denom = map(float, parts[1].split('/')) 
    elif len(parts) == 1: 
     if '/' in parts[0]: 
      numer, denom = map(float, parts[0].split('/')) 
     else: 
      return float(parts[0]) 
    return whole + (numer/denom) 

Hier ist ein Probelauf

>>> sc.parallelize(["99 230/256", "1/100"]).map(convertFrac).collect() 
[99.8984375, 0.01] 

Warnung, dies nicht auf alle Eingänge funktioniert (vor allem Negativen wie "-2 3/5" Bedürfnisse als "-2 -3/5" geschrieben werden) - es ist nur ein Beispiel dafür, was Sie brauchen machen.

+0

Ich benutze Scala API, aber das hilft definitiv. Es gibt auch keinen Bereich von negativen Werten, so dass Ihre Funktion perfekt funktioniert. Außerdem habe ich gewählt, die Spalte in 'spark-sql's' select'-Klausel zu manipulieren (nicht sicher, ob es eine gute Idee ist), aber ich fand es viel einfacher, es in sql zu tun (persönliche Präferenz, obwohl!). Danke für den Code. – Veenit

+0

Gotcha. Ja, nur einfaches Wert Casting und String Splitting. Nichts zu kompliziert. –

Verwandte Themen