spark方法的异常行为

jaql4c8m  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(281)

我在探索spark函数。对于某些Dataframe,它似乎是持久的,而对于其他Dataframe,它不是持久的,即使我在所有的Dataframe上都使用了persist方法
这是我的代码和解释

// loading csv as dataframe and creating a view
val src_data=spark.read.option("header",true).csv("sources/data.csv")
src_data.createTempView("src_data")

**There is alreading a table called test in hive**

Here I am creating 3 dataframes using src and test and using persist on all 3 for later use
//dataframe 1
val changed_data= spark.sql("select sc.* from src_data sc inner join default.test t on sc.id=t.id where t.value!=sc.value or t.description!=sc.description ")
   changed_data.persist().show()
   changed_data.createOrReplaceTempView("changed_data")

// dataframe 2
 val new_data= spark.sql("select * from src_data where id not in (select distinct id from default.test)")
   println("new_data")
   new_data.persist().show()
   new_data.createOrReplaceTempView("new_data")

// dataframe 3
 val unchanged_data= spark.sql("select * from test where id not in (select id from changed_data)")
   unchanged_data.persist().show()
   unchanged_data.createTempView("unchanged_data")

**then I truncate the table test**

spark.sql("truncate table test")

***Then i print the 3 dataframes I persisted***

new_data.show()
unchanged_data.show()
changed_data.show()

在截短测试之前,我可以使用show查看所有3个Dataframe的数据,但是在我只看到一个Dataframe的数据之后。。。。我只得到新的数据(这是Dataframe2),即使我坚持所有3个Dataframe和所有3个使用表测试??
为什么会有这种奇怪的行为

zfciruhq

zfciruhq1#

只有在调用遍历Dataframe的每个记录的操作时,Dataframe才会被持久化。
记住,那 show() 仅显示scaladocs中记录的前20行。
相反,你可以应用 count() 但这显然会对你的表现产生一些负面影响。

相关问题