You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@spark.apache.org by Philip Weaver <ph...@gmail.com> on 2015/08/04 04:37:16 UTC
Safe to write to parquet at the same time?
I think this question applies regardless if I have two completely separate
Spark jobs or tasks on different machines, or two cores that are part of
the same task on the same machine.
If two jobs/tasks/cores/stages both save to the same parquet directory in
parallel like this:
df1.write.mode(SaveMode.Append).partitionBy(a, b).parquet(dir)
df2.write.mode(SaveMode.Append).partitionBy(a, b).parquet(dir)
Will the result be equivalent to this?
df1.unionAll(df2).write.mode(SaveMode.Append).partitionBy(a, b).parquet(dir)
What if we ensure that 'dir' does not exist first?
- Philip
Re: Safe to write to parquet at the same time?
Posted by Cheng Lian <li...@gmail.com>.
It should be safe for Spark 1.4.1 and later versions.
Now Spark SQL adds a job-wise UUID to output file names to distinguish
files written by different write jobs. So those two write jobs you gave
should play well with each other. And the job committed later will
generate a summary file for all Parquet data files it sees. (However,
Parquet summary file generation may fail due to various reasons and is
generally not reliable.)
Cheng
On 8/4/15 10:37 AM, Philip Weaver wrote:
> I think this question applies regardless if I have two completely
> separate Spark jobs or tasks on different machines, or two cores that
> are part of the same task on the same machine.
>
> If two jobs/tasks/cores/stages both save to the same parquet directory
> in parallel like this:
>
> df1.write.mode(SaveMode.Append).partitionBy(a, b).parquet(dir)
>
> df2.write.mode(SaveMode.Append).partitionBy(a, b).parquet(dir)
>
>
> Will the result be equivalent to this?
>
> df1.unionAll(df2).write.mode(SaveMode.Append).partitionBy(a,
> b).parquet(dir)
>
>
> What if we ensure that 'dir' does not exist first?
>
> - Philip
>