【发布时间】:2018-05-24 04:39:30
【问题描述】:
我正在从现有的 hive 表创建一个数据框。表按日期和站点列进行分区。现在,当我尝试用前一天的数据进行一些计算后覆盖同一个表中的数据时。它已成功加载。
但是当我尝试在 S3 存储桶中写入最终数据帧时。我收到错误提示找不到文件。现在它提到的文件是前一天的文件,现在已被覆盖。
如果我先写数据帧然后覆盖表,那么它运行良好。
在S3位置写入,和表分区文件有什么关系?
下面是错误和代码。
java.io.FileNotFoundException:没有这样的文件或目录:s3://bucket_1/DM/web_fact_tbl/local_dt=2018-05-10/site_name=ABC/part-00000-882a6e29-eb6a-477c-8b88-6fe853956674 .c000
fact_tbl = spark.table('db.web_fact_tbl')
fact_lkp = fact_tbl.filter(fact_tbl['local_dt']=='2018-05-10')
fact_join = fact_lkp.alias('a').join(fact_tbl.alias('b'),(col('a.id') == col('b.id')),"inner").select('a.*')
fact_final = fact_join.union(fact_tbl)
fact_final.coalesce(2).createOrReplaceTempView('cwf')
spark.sql('INSERT OVERWRITE TABLE dm.web_fact_tbl PARTITION (local_dt, site_name) \
SELECT * FROM cwf')
fact_final.write.csv('s3://bucket_1/yahoo')
【问题讨论】:
-
我了解就地写入并不安全。这个答案解释了解决这个问题的原因和方法stackoverflow.com/a/49842311/5189811
-
我对 AWS 了解不多,但我想知道一件事,如果您的分区名称是 local_dt 和 site_name,它应该在您的 hdfs 路径中吗?
-
您要手动删除分区吗?
-
@JaishreeRout 它的S3位置和外部表路径和写入路径不同
-
@MaheshKalani,好的,我对此不太了解。您可以将此问题标记为 Amazon-s3。您可能会得到更多更快的响应。
标签: apache-spark amazon-s3 pyspark apache-spark-sql