【发布时间】:2017-05-24 00:55:24
【问题描述】:
我是 Spark 框架的新手,并且在我的本地机器上处理一些 (~) 小任务来练习。 我的任务如下:我在 S3 中存储了 365 个压缩的 csv 文件,其中包含每日日志。我想构建一个全年的数据框。我的方法是从存储桶中检索密钥,构建每日数据帧,将它们统一为月份数据帧,为它们做同样的事情,并获得一整年的数据帧作为回报。
这对我检索到的一些样本数据进行了测试。在构建 DataFrame 之前,我解压缩了文件,将未压缩的 csv 文件写入磁盘,并使用它来创建 DataFrame。
问题:如果我从磁盘中删除 csv 文件(将其设为临时文件),则在创建数据框后,我无法对数据框执行任何操作(例如 year_df.count())。抛出 Spark.exception:
“作业因阶段失败而中止:.... java.io.FileNotFoundException: 文件 .csv 不存在”
在对 SO 进行一些搜索后,我发现原因可能是 Spark 在对 DataFrame 应用 SQL 查询时使用的 MetaData (External Table not getting updated from parquet files written by spark streaming)。我改了
spark.sql.parquet.cache元数据
通过运行spark = SparkSession.builder.config("spark.sql.parquet.cacheMetadata", "false").getOrCreate()。确保 spark.conf.get("spark.sql.parquet.cacheMetadata") 返回 false..
找不到任何解决方案。当然,将所有文件解压缩到 S3 中也可以,但这对我没有用..
谢谢!
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql