2017-03-13 61 views
0

我想從本地文件系統讀取csv文件,從中創建數據幀,刪除文件並返回數據幀。是的,我必須刪除它。 由於除刪除之外,所有事情都是懶惰地完成的,所以應用程序失敗,因爲代碼執行時找不到文件。Spark - 從csv文件創建數據框並刪除文件

def do_something() : DataFrame { 
     val file = File.createTempFile("query2Output", ".csv") 
     //some code which writes to the file 

     val df = sqlContext.read 
      .format("com.databricks.spark.csv") 
      .option("header", "true") 
      .option("mode", "DROPMALFORMED") 
      .load(file.getPath) 

     file.delete 
     df 
} 

回答

-1

可以緩存你的數據框和運行即依靠RDD剛剛創建數據幀後執行閱讀:

val df = /* reading*/.cache() 
df.count() 
file.delete() 

但是,如果處理失敗,那麼你將不會有可能重新創建數據幀

+0

謝謝!我嘗試了.cache(),但沒有意識到我必須調用.count()(或任何其他操作)才能生效。 – Raytracer

+0

這是懶惰:)檢查也http://stackoverflow.com/questions/42714291/how-to-force-dataframe-evaluation-in-spark –

+0

順便說一句,爲什麼不會df.count()就夠了? – Raytracer