2017-01-19 1 views
1

Ich habe einen Datensatz, der in der folgenden Weise konstruiert wurde:Spark-Speichern DataSet partitionby Datei existiert bereits Fehler

Encoder<MyDomain> encoder= Encoders.bean(MyDomain.class); 
Dataset<MyDomain> stdDS = sc.createDataset(filteredRecords.rdd(), encoder); 
Dataset<Row> rowDataset = stdDS.withColumn("idHash", stdDS.col("id").substr(0, 5)); 

Ich versuche dann zur Ausgabe des Datensatzes, indem Sie:

 rowDataset.write().partitionBy("keep", "idHash").save("test.parquet"); 

Als ich nur Partition von „halten“ alles richtig funktioniert, dann partitionieren ich sowohl von „halten“ und „idHash“ ich bekomme:

File already exists: file:/C:/dev/test.parquet/_temporary/0/_temporary/attempt_201701191219_0001_m_000000_0/keep=true/idHash=0a/part-r-00000-2c2e0494-f6a7-47d7-88e2-f49dffb608d1.snappy.parquet 

Wie kann ich mein DataSet korrekt mit mehreren Partitionen ausgeben? Der Ordner ist zu Beginn leer. Auch dieser Fehler tritt auf, wenn ich auf meinem lokalen Rechner laufe. In der Produktion werden diese Daten an S3 ausgegeben, so dass jede Lösung sowohl gegen ein lokales Dateisystem als auch gegen AWS S3 arbeiten muss.

Danke, Nathan

+0

Haben Sie versucht, diese 'schreiben zu setzen(). Modus ("anhängen")' oder 'write(). Modus ("überschreiben")' ? –

+0

Ich versuchte Append, aber der gleiche Fehler ist aufgetreten, ich würde nicht denken, dass beide Optionen benötigt werden, da es keine Ausgangsdaten zu Beginn gibt. –

+0

Haben Sie eine Lösung dafür gefunden? – rohitkulky

Antwort

0

Versuchen

rowDataset.repartition("keep", "idHash").write().partitionBy("keep", "idHash").save("test.parquet"); 
Verwandte Themen