2017-01-19 7 views
1

У меня есть набор данных, который был построен следующим образом:Спарк Сохранить DataSet partitionby Файл уже существует Ошибка

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)); 

Я затем пытается вывести набор данных, выполнив:

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

Когда я раздел только на «держать» все работает правильно, то я разметить обоими «держать» и «idHash» я получаю:

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 

Как я могу получить свой DataSet для корректного вывода с использованием нескольких разделов. Папка пуста для начала. Также эта ошибка происходит, когда я запускаю на своей локальной машине, в производстве эти данные будут выводиться на S3, поэтому любое решение должно работать как с локальной файловой системой, так и с AWS S3.

Спасибо, Натан

+0

ли вы попытайтесь поместить этот 'запись(). Режим ("добавить") или' записи(). Режим ("перезаписать") ' ? –

+0

Я попытался добавить, но произошла одна и та же ошибка, я бы не подумал, что любой из них понадобится, поскольку для начала нет выходных данных. –

+0

Вы получили решение? – rohitkulky

ответ

0

Попробуйте

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