2017-05-17 14 views
1

Ich habe Daten mit Komma in Fließkommazahlen importiert und ich frage mich, wie kann ich Komma in Punkt "konvertieren". Ich benutze pyspark dataframe, also habe ich das versucht:PySpark Dataframe: Komma zu Punkt

Und es funktioniert definitiv nicht. Also können wir es direkt im Dataframe von Funken ersetzen oder sollten wir in numpy Typ oder etwas anderes wechseln?

Danke!

+0

Wie haben Sie Daten "importiert"? – errata

+0

In Zeppelin verwende ich diese Zeile, um meine Daten zu importieren. Meine Daten sind in einer csv-Datei in hadoop: myData = spark.read.option ("Begrenzer", ";"). Option ("Header", "True"). CSV (Server + '/ Benutzer/Hadoop/dataAirpl/C6H5_C2H3/C6H5_C2H3_2016_08_01.csv '). Ich habe auch versucht, die Liste der Reader-Optionen in pyspark.sql.readwriter.DataFrameReader.option (Schlüssel, Wert) ohne Erfolg zu finden. Hier ist der [link] (https://spark.apache.org/docs/ 1.5.0/api/python/_modules/pyspark/sql/readwriter.html) des Dokuments – fjcf1

+0

Das udf funktioniert nicht, da der Rückgabetyp der Funktion 'FloatType' ist, Sie aber keine Fließkomma-Konvertierung durchführen. Kann versuchen wie 'Lambda x: float (str (x) .replace (',', '.'))' – Pushkr

Antwort

2

Ich glaube, Sie sind

from pyspark.sql.types import FloatType 

fehlt Wie Pushkr UDF vorgeschlagen, mit Ihnen String-Spalte geben ersetzen zurück, wenn Sie Ergebnis

from pyspark import SQLContext 
from pyspark.sql.functions import udf 
from pyspark.sql.types import FloatType 
from pyspark import SparkConf, SparkContext 
conf = SparkConf().setAppName("ReadCSV") 
sc = SparkContext(conf=conf) 
sqlctx = SQLContext(sc) 
df = sqlctx.read.option("delimiter", ";").load("test.csv", format="csv") 
df.show() 
commaToDot = udf(lambda x : float(str(x).replace(',', '.')), FloatType()) 
df2=df.withColumn('area',commaToDot(df._c0)) 
df2.printSchema() 
df2.show() 

ich einzelne Spalte Datei verwendet zu schweben nicht konvertieren, getestet auf Funken 2.11/python 3.6

2

Ein anderer Weg, es zu tun ist:

myData = myData.withColumn('area', regexp_replace('area', ',', '.').cast('float')) 
+0

Das ist besser als mit udf IMO – chhantyal

Verwandte Themen