scala—如何保存不为空的sparkDataframe

57hvy0tb  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(344)

我们正在保存一个Dataframe,但我们需要检查Dataframe不应为空。
为了实现这一点,我们正在使用 df.isEmpty() 这是保存df时非常常见的做法。
我担心的是df.isempty,head(1),limit(1)所有这些都会执行一个动作,第一次执行整个计划&当我们保存它时,第二次会再次触发(执行)计划。是不是很糟糕,有没有更好的办法?
在我遇到的大多数代码示例中,这是保存非空Dataframe的常用方法检查空(触发操作并执行计划),然后保存(再次触发操作并执行整个计划)

hm2xizp9

hm2xizp91#

我不会用df.rdd.isempty。这种方法将Dataframe转换为rdd,rdd可能不使用底层优化器(catalyst优化器),从而减慢进程。
使用count(),但一定要保存数据,以避免不必要的计划执行。

dataframe.persist() // persist data in order to avoid redundant executions
if (dataframe.count() > 0) // first action. triggers plan
    dataframe
       .write
       .mode("overwrite")
       .format("desired.format")
       .save("foo/bar") // second action. due to previous persis(), plan will not be triggered
dataframe.unpersist() // unpersist it, data is no longer needed

希望有帮助

相关问题