2017-02-21 5 views
1

Ich bin gerade mit Pyspark beginnen und möchte eine Datei als csv anstelle einer Textdatei speichern. Ich habe versucht, ein paar Antworten mit I auf Stack-Überlauf wieRDD zu CSV mit geteilten Spalten schreiben

def toCSVLine(data): 
    return ','.join(str(d) for d in data) 

und dann

rdd = lines.map(toCSVLine) 
rdd.saveAsTextFile("file.csv") 

Es funktioniert in fand, dass ich es in Excel öffnen kann, aber alle Informationen in Spalte A gesetzt werden in der Tabelle. Ich würde gerne in der Lage sein, jede Spalte in die RDD (ein Beispiel wäre ("ID", "Rating") in eine separate Spalte in Excel, so ID wäre in Spalte A und Bewertung wäre in Spalte B. Ist da ein Weg, dies zu tun?

Antwort

0

Eine Option besteht darin, RDD in Dataframe zu konvertieren und dann als CSV zu speichern.

from pyspark import SparkContext 
df = sqlContext.createDataFrame(rdd, ['count', 'word']) 
# Write CSV (I have HDFS storage) 
df.coalesce(1).write.format('com.databricks.spark.csv').options(header='true').save('file:///home/username/csv_out') 

Bitte lesen Sie diesen Beitrag habe ich gerade gemacht: How to write the resulting RDD to a csv file in Spark python

+0

Das hat funktioniert, aber gibt es eine Möglichkeit, Kommas in Anführungszeichen zu ignorieren? Es teilt eine Textzeile auf, die ich in mehreren Spalten zusammenhalten muss, da sie einige Kommas enthält. – tclaw46

+0

Sie können wahrscheinlich ein anderes Trennzeichen mit .option ("delimiter", "|") verwenden und dieses Trennzeichen beim Öffnen verwenden. Excel – Insilico

+0

Okay, ich konnte es mit diesem Code arbeiten. Danke für Ihre Hilfe. – tclaw46

1

in Excel sind Sie die Datei auf dem Aufspalten ‚‘?

in Excel die Daten Registerkarte gehen und Text in Spalten unter Datentool wählen Sie dann begrenzt wählen und drücken Sie als nächstes.Wählen Sie anschließend Komma als Trennzeichen und Trefferziel

Im Allgemeinen wäre es am besten, einen csv mit einem anderen Trennzeichen als Komma zu erstellen, wenn Kommata in Ihren Daten enthalten sind. Verwenden Sie für Ihren Kommentar, wenn Sie den CSV erstellen, einfach ein anderes Trennzeichen (z. B. ';', '|', '^' oder Tabs). Eine weitere Option, die wir lieber weniger, ist das Feld in Frage wickeln in „“ in etwa so:

field0,field1,"field,2",field3 

Excel sollten verlassen, was in Anführungszeichen ist allein und nur Split auf Komma außerhalb der Anführungszeichen. Aber das ist nicht meine bevorzugte Lösung.

+0

Ich habe diese Methode versuchen, aber es geteilt eine der Spalten, wo es eine Textzeile mit mehreren Kommas in es in mehrere Spalten war. Gibt es eine Möglichkeit, diese Methode zu verwenden, während Kommas in Anführungszeichen ignoriert werden? – tclaw46

1

Wenn Sie Spark> = 2.0 verwenden und davon ausgehen, dass Ihre RDD ein Tabellenformat hat (was Sie tun sollten, wenn Sie sie als CSV speichern möchten), könnten Sie zuerst einen Dataframe aus der RDD erstellen und dann verwenden DataFrameWriter in CSV exportieren.

from pyspark.sql import SparkSession 

spark = SparkSession(sc).getOrCreate() 

df = spark.createDataframe(rdd) 

df.write.csv("/path/to/file.csv", sep=',', header=True) 

Hier finden Sie aktuelle the pyspark.sql docs für zusätzliche Optionen und weitere Informationen.

+0

Gibt es eine Möglichkeit, ein Komma als Trennzeichen zu verwenden, während Kommas in Anführungszeichen ignoriert werden? – tclaw46

+0

Kommas in Strings sollten in Ordnung sein, da Strings automatisch zitiert werden sollten. Hast du die Optionen 'sep',' quote', 'escape' usw. ausprobiert? – karlson