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
Apache spark 将数据帧保存到表-Pyspark中的性能_Apache Spark_Pyspark_Hive - Fatal编程技术网

Apache spark 将数据帧保存到表-Pyspark中的性能

Apache spark 将数据帧保存到表-Pyspark中的性能,apache-spark,pyspark,hive,Apache Spark,Pyspark,Hive,我知道有两种方法可以将DF保存到Pyspark中的表中: 1) df.write.saveAsTable("MyDatabase.MyTable") 2) df.createOrReplaceTempView("TempView") spark.sql("CREATE TABLE MyDatabase.MyTable as select * from TempView") 在大型分布式数据集上运行时,使用“CREATE TABLE AS”语句与使用“saveAsTable”语句在性能上

我知道有两种方法可以将DF保存到Pyspark中的表中:

1) df.write.saveAsTable("MyDatabase.MyTable")

2) df.createOrReplaceTempView("TempView")
   spark.sql("CREATE TABLE MyDatabase.MyTable as select * from TempView")

在大型分布式数据集上运行时,使用“CREATE TABLE AS”语句与使用“saveAsTable”语句在性能上是否有任何区别?

createOrReplaceTempView
创建(或替换,如果该视图名称已存在)一个可在Spark SQL中用作表的延迟计算“视图”。除非调用构成视图基础的数据集上的
cache
,否则在调用操作(如
count
)或持久化到
内存之前,它不会具体化。顾名思义,这只是一个临时视图。应用程序/会话结束后,它将丢失

另一方面,
saveAsTable
将数据保存到外部存储,如
hdfs
s3
adls
。这是永久存储,持续时间超过SparkSession或Spark应用程序的范围,可供以后使用


因此,主要区别在于数据集的生存期与性能。显然,在同一个作业中,处理缓存数据的速度更快

.cache()
本身也不会具体化数据集。问题是关于
.saveAsTable
vs
spark.sql(CTAS)
@mazaneicha再次阅读我的答案。它清楚地表明你需要采取“行动”来实现目标。:-)@AravindYarram,谢谢你的评论,但我这并不是在回答我的问题。我想问的是,将数据保存到外部存储的最佳方式是什么。使用saveAsTable或spark.sql(CTAS)甚至spar.sql(INSERT-in…)有什么区别吗?