<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Spark: How to simultaneously read from and write to the same parquet file in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27720#M19575</link>
    <description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt; &lt;B&gt;How can I read a DataFrame from a parquet file, do transformations and write this modified DataFrame back to the same same parquet file? &lt;/B&gt;&lt;/P&gt;
&lt;P&gt; If I attempt to do so, I get an error, understandably because spark reads from the source and one cannot write back to it simultaneously. Let me reproduce the problem -&lt;/P&gt;
&lt;P&gt; &lt;I&gt; df = spark.createDataFrame([(1, 10),(2, 20),(3, 30)], ['sex','date'])&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; # Save as parquet&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; df.repartition(1).write.format('parquet').mode('overwrite').save('.../temp')&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; # Load it back&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; df = spark.read.format('parquet').load('.../temp')&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; # Save it back - This produces ERROR &lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; df.repartition(1).write.format('parquet').mode('overwrite').save('.../temp')&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;B&gt;ERROR: &lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;java.io.FileNotFoundException: Requested file maprfs:///mapr/.../temp/part-00000-f67d5a62-36f2-4dd2-855a-846f422e623f-c000.snappy.parquet does not exist. It is possible the underlying files have been updated. You can explicitly invalidate the cache in Spark by running 'REFRESH TABLE tableName' command in SQL or by recreating the Dataset/DataFrame involved. &lt;/I&gt;&lt;/P&gt;
&lt;P&gt; One &lt;B&gt;&lt;/B&gt;&lt;I&gt;&lt;B&gt; workaround &lt;/B&gt;&lt;/I&gt;to this problem is to save the DataFrame with a differently named parquet folder -&amp;gt; Delete the old parquet folder -&amp;gt; rename this newly created parquet folder to the old name. But this is very inefficient way of doing it, not to mention those DataFrames which are having billions of rows.&lt;/P&gt;
&lt;I&gt;&lt;/I&gt;
&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;P&gt;&lt;I&gt;&lt;I&gt; I did some research and found that people are suggesting doing some &lt;I&gt;REFRESH TABLE &lt;/I&gt;to refresh the MetaData, as can be seen here and here.&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;P&gt;&lt;I&gt;&lt;I&gt; Can anyone suggest how to read and then write back to exactly the same parquet file ?&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;I&gt; &lt;/I&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 26 Sep 2019 10:37:08 GMT</pubDate>
    <dc:creator>olisch</dc:creator>
    <dc:date>2019-09-26T10:37:08Z</dc:date>
    <item>
      <title>Spark: How to simultaneously read from and write to the same parquet file</title>
      <link>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27720#M19575</link>
      <description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt; &lt;B&gt;How can I read a DataFrame from a parquet file, do transformations and write this modified DataFrame back to the same same parquet file? &lt;/B&gt;&lt;/P&gt;
&lt;P&gt; If I attempt to do so, I get an error, understandably because spark reads from the source and one cannot write back to it simultaneously. Let me reproduce the problem -&lt;/P&gt;
&lt;P&gt; &lt;I&gt; df = spark.createDataFrame([(1, 10),(2, 20),(3, 30)], ['sex','date'])&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; # Save as parquet&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; df.repartition(1).write.format('parquet').mode('overwrite').save('.../temp')&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; # Load it back&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; df = spark.read.format('parquet').load('.../temp')&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; # Save it back - This produces ERROR &lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;I&gt; df.repartition(1).write.format('parquet').mode('overwrite').save('.../temp')&lt;/I&gt;&lt;/P&gt;
&lt;P&gt; &lt;B&gt;ERROR: &lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;java.io.FileNotFoundException: Requested file maprfs:///mapr/.../temp/part-00000-f67d5a62-36f2-4dd2-855a-846f422e623f-c000.snappy.parquet does not exist. It is possible the underlying files have been updated. You can explicitly invalidate the cache in Spark by running 'REFRESH TABLE tableName' command in SQL or by recreating the Dataset/DataFrame involved. &lt;/I&gt;&lt;/P&gt;
&lt;P&gt; One &lt;B&gt;&lt;/B&gt;&lt;I&gt;&lt;B&gt; workaround &lt;/B&gt;&lt;/I&gt;to this problem is to save the DataFrame with a differently named parquet folder -&amp;gt; Delete the old parquet folder -&amp;gt; rename this newly created parquet folder to the old name. But this is very inefficient way of doing it, not to mention those DataFrames which are having billions of rows.&lt;/P&gt;
&lt;I&gt;&lt;/I&gt;
&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;P&gt;&lt;I&gt;&lt;I&gt; I did some research and found that people are suggesting doing some &lt;I&gt;REFRESH TABLE &lt;/I&gt;to refresh the MetaData, as can be seen here and here.&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;I&gt;&lt;/I&gt;&lt;P&gt;&lt;I&gt;&lt;I&gt; Can anyone suggest how to read and then write back to exactly the same parquet file ?&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;I&gt; &lt;/I&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Sep 2019 10:37:08 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27720#M19575</guid>
      <dc:creator>olisch</dc:creator>
      <dc:date>2019-09-26T10:37:08Z</dc:date>
    </item>
    <item>
      <title>Re: Spark: How to simultaneously read from and write to the same parquet file</title>
      <link>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27721#M19576</link>
      <description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt;This way &lt;/P&gt;
&lt;P&gt;it was working ...&lt;/P&gt;import org.apache.spark.sql.functions._
&lt;P&gt;&lt;/P&gt; 
&lt;P&gt;val df = Seq((1, 10), (2, 20), (3, 30)).toDS.toDF("sex", "date") df.show(false) // save it &lt;/P&gt; 
&lt;P&gt;df.repartition(1).write.format("parquet").mode("overwrite").save(".../temp") &lt;/P&gt; 
&lt;P&gt;// read back again val df1 = spark.read.format("parquet").load(".../temp") val df2 = df1.withColumn("cleanup" , lit("Quick silver want to cleanup")) &lt;/P&gt; 
&lt;P&gt;// BELOW 2 ARE IMPORTANT STEPS LIKE &lt;PRE&gt;&lt;CODE&gt;cache&lt;/CODE&gt;&lt;/PRE&gt; and &lt;PRE&gt;&lt;CODE&gt;show&lt;/CODE&gt;&lt;/PRE&gt; forcing a light action show(1) with out which file not found exception will come..&lt;/P&gt; 
&lt;P&gt;df2.cache // cache to avoid FileNotFoundException df2.show(2) // light action or println(df2.count) also fine&lt;/P&gt; 
&lt;P&gt;df2.repartition(1).write.format("parquet").mode("overwrite").save(".../temp")&lt;/P&gt; 
&lt;P&gt;df2.show(false)&lt;/P&gt;
&lt;P&gt;will work for sure only thing is you need to cache and perform small action like show(1) this is altermative route thought of proposing to the users who mandatorily need it.&lt;/P&gt;
&lt;P&gt;Result ... file : read and overwritten&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="0693f000007OroeAAC"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/2510i7EDFF75160C8FC7A/image-size/large?v=v2&amp;amp;px=999" role="button" title="0693f000007OroeAAC" alt="0693f000007OroeAAC" /&gt;&lt;/span&gt;&lt;/P&gt; 
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 04 May 2020 04:25:50 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27721#M19576</guid>
      <dc:creator>RamG</dc:creator>
      <dc:date>2020-05-04T04:25:50Z</dc:date>
    </item>
    <item>
      <title>Re: Spark: How to simultaneously read from and write to the same parquet file</title>
      <link>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27722#M19577</link>
      <description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Thanks.. it worked&lt;/P&gt; 
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 21 Jul 2020 18:05:52 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27722#M19577</guid>
      <dc:creator>ManishKumarPand</dc:creator>
      <dc:date>2020-07-21T18:05:52Z</dc:date>
    </item>
    <item>
      <title>Re: Spark: How to simultaneously read from and write to the same parquet file</title>
      <link>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27723#M19578</link>
      <description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;You can use insertinto instead of save. It will overwrite the target file no need to cache or persist your dataframe&lt;/P&gt;
&lt;P&gt;Df.write.format("parquet").mode("overwrite").insertInto("/file_path")&lt;/P&gt;
&lt;P&gt;~Saravanan&lt;/P&gt; 
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 03 Sep 2020 22:41:16 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/spark-how-to-simultaneously-read-from-and-write-to-the-same/m-p/27723#M19578</guid>
      <dc:creator>saravananraju</dc:creator>
      <dc:date>2020-09-03T22:41:16Z</dc:date>
    </item>
  </channel>
</rss>

