21. spark sql 从某一个表读取数据,之后再将数据写回原表,没有数据?

21.

spark sql 从某一个表读取数据,之后再将数据写回原表,没有数据?

原因:回归问题本质,Spark是惰性执行。 具体解释请看如下帖子中的说明。

最佳答案
问题出在您的代码中.因为您覆盖了一个您尝试读取的表,所以在Spark实际访问它之前,您会有效地删除所有数据.
请记住,Spark是懒惰的.创建数据集时,Spark会提取所需的元数据,但不会加载数据.因此,没有魔法缓存可以保留原始内容.实际需要时将加载数据.在这里,当您执行写入操作时,当您开始写入时,不再需要获取数据.

你需要的是这样的:

>创建数据集.
>应用所需的转换并将数据写入中间MySQL表.
> TRUNCATE原始输入和INSERT INTO … SELECT从中间表或DROP原始表和RENAME中间表.

替代但不太有利的方法是:

>创建数据集.
>应用所需的转换并将数据写入持久性Spark表(df.write.saveAsTable(…)或等效表)
> TRUNCATE原始输入.
>读取数据并保存(spark.table(…).write.jdbc(…))
> Drop Spark表.

https://codeday.me/bug/20190309/744771.html

https://codeday.me/bug/20190301/716426.html

 

此贴来自汇总贴的子问题,只是为了方便查询。

总贴请看置顶帖:

pyspark及Spark报错问题汇总及某些函数用法。

https://blog.csdn.net/qq0719/article/details/86003435

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值