这里是指saveastable和insertinto之间的区别
以下两种方法的区别是什么:
df.saveAsTable("mytable");
和
df.createOrReplaceTempView("my_temp_table");
spark.sql("drop table if exists " + my_temp_table);
spark.sql("create table mytable as select * from
my_temp_table");
在哪种情况下表存储在内存中,在哪种情况下物理上存储在磁盘上?
而且,据我所知, createOrReplaceTempView
只注册Dataframe(已经在内存中)以便通过配置单元查询访问,而不实际持久化它,对吗?
我不得不加入成百上千的表格,并点击outofmemory问题。就效率而言,最好的方法是什么? df.persist()
和df.join(..).join(..).join(..)#100个连接 createOrReplaceTempView
然后加入 spark.sql()
, SaveAsTable
(? 不确定下一步)
写入磁盘 Create Table
然后加入 spark.sql()
?
1条答案
按热度按时间wooyq4lh1#
我们一步一步走吧。
如果是
df.saveAsTable("mytable")
,表实际上被写入存储(hdfs/s3)。这是一个Spark行动。另一方面:
df.createOrReplaceTempView("my_temp_table")
是一种转变。它只是用于的dag的标识符df
. 实际上没有任何东西存储在内存或磁盘上。spark.sql("drop table if exists " + my_temp_table)
放下table。spark.sql("create table mytable as select * from my_temp_table")
创建mytable
在仓库里。createOrReplaceTempView
在中创建表global_temp
数据库。最好将查询修改为:
create table mytable as select * from global_temp.my_temp_table
createorreplacetempview只注册Dataframe(已经在内存中)以便通过配置单元查询访问,而不实际持久化它,对吗?是的,对于大型DAG,spark将根据需要自动缓存数据
spark.memory.fraction
设置。检查此页。我不得不加入成百上千的表格,并点击outofmemory问题。就效率而言,最好的方法是什么?