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.
Sie müssen ein UDF erstellen, um es zu parsen, den Bruchwert zu berechnen und ein Doppel zurückzugeben. – eliasah
Ja. Ich stimme zu. Ich habe nachgesehen, ob dies mit vordefinierten Methoden möglich ist, aber Sie haben Recht. – Veenit