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