spark读写相同路径文件

5 篇文章 0 订阅

有些情况下,需要spark读取A路径文件,处理后再存入A路径,如不注意,会报错!!!

1.读写相同的HIVE表

spark读取hive表:

      // 原始数据
      final_data = spark.sql(s"select * from ${userid}.${datasetid}")
       
	  .....对数据操作.....
	  
不能 select 后在overwrite同一张表:

错误的: Spark报错

final_data.write.mode("overwrite").saveAsTable(s"${userid}.${datasetid}")

正确方法:

用临时表先进行保存,再删除临时表:

      //将结果保存在临时表中
      final_data.write.mode(SaveMode.Overwrite).saveAsTable(s"${userid}.tmp_tab")
      //将临时表覆盖结果表
      spark.table(s"${userid}.tmp_tab").write.mode("overwrite").saveAsTable(s"${userid}.${datasetid}")
      // 删除临时表
      spark.sql(s"DROP TABLE IF EXISTS ${userid}.tmp_tab")
      

2.读写HDFS上相同路径

      var final_data = spark.read.parquet(hdfspath)

       ......对数据操作.....

不能直接写入相同路径

错误:

      final_data.write.mode(SaveMode.Overwrite).parquet(hdfspath)

Spark报错:
Caused by: java.io.FileNotFoundException: File does not exist…

正确方法:

先对数据进行cache或者persist

      final_data = final_data.persist()
      // final_data = final_data.cache()
      final_data.write.mode(SaveMode.Overwrite).parquet(hdfspath)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值