Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何保存不为空的spark数据帧_Scala_Apache Spark_Hadoop_Apache Spark Sql - Fatal编程技术网

Scala 如何保存不为空的spark数据帧

Scala 如何保存不为空的spark数据帧,scala,apache-spark,hadoop,apache-spark-sql,Scala,Apache Spark,Hadoop,Apache Spark Sql,我们正在保存一个数据帧,但需要检查该数据帧是否不应为空 为了实现这一点,我们使用df.isEmpty,这是保存df时非常常见的做法 我担心的是df.isEmpty、head1、limit1所有这些都会执行一个动作,第一次执行整个计划&然后当我们保存它时,会触发第二次再次执行计划。这不是很糟糕吗,有更好的方法吗 在我遇到的大多数代码示例中,这是保存非空数据帧的常用方法检查empty哪个触发操作并执行计划,然后保存哪个触发操作并再次执行整个计划我不会使用df.rdd.isEmpty。这种方法将数据帧

我们正在保存一个数据帧,但需要检查该数据帧是否不应为空

为了实现这一点,我们使用df.isEmpty,这是保存df时非常常见的做法

我担心的是df.isEmpty、head1、limit1所有这些都会执行一个动作,第一次执行整个计划&然后当我们保存它时,会触发第二次再次执行计划。这不是很糟糕吗,有更好的方法吗


在我遇到的大多数代码示例中,这是保存非空数据帧的常用方法检查empty哪个触发操作并执行计划,然后保存哪个触发操作并再次执行整个计划

我不会使用df.rdd.isEmpty。这种方法将数据帧转换为rdd,而rdd可能不会利用底层优化器catalyst optimizer,从而减慢流程

使用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

希望这对你有所帮助。I空,head1,limit1是你最好的选择。他们只会抓住第一排,所以他们不会那么慢。事实上,不管你怎么看,这是一个很难解决的问题。我不知道为什么人们坚持这样做,根本不担心这一切。“如果是一个空文件呢?”蓝色幻影说,“我不知道他为什么担心这个。”。我只是以我所知道的最好的方式回答他的问题。如果我们有空文件,我们的下一个进程将失败。因此,在调用save之前,我们需要检查DF是否为空