2017-03-13 129 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