我在探索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个使用表测试??
为什么会有这种奇怪的行为
1条答案
按热度按时间zfciruhq1#
只有在调用遍历Dataframe的每个记录的操作时,Dataframe才会被持久化。
记住,那
show()
仅显示scaladocs中记录的前20行。相反,你可以应用
count()
但这显然会对你的表现产生一些负面影响。