目前,我有很多表,我必须更新它们所保存的信息,有时每天或每周更新一次。到目前为止,我一直通过以下组合来做到这一点DROP TABLE IF EXIST some_schema.some_table_name;,CREATE TABLE some_schema.some_table_name AS ( SELECT ... FROM ... WHERE ...);我想知道什么是“最佳实践”或正确的方法。
我读到INSERTRedshift 中的操作非常昂贵,所以我一直在避免使用它,但也许使用TRUNCATEwithINSERT比删除和创建更好。
我如何确认哪个选项更好?
我已经从 Redshift 文档中看到了这篇文章,但我不确定这是否是最佳选择,因为我不仅可以删除记录,还可以保留和插入记录。
我对 pyspark 很陌生,我遇到了以下错误:
Py4JJavaError: An error occurred while calling o517.showString.我读过这是由于内存不足:Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
所以,我一直在读到这种情况的转变是使用df.persist()和然后再次阅读持久化的df,所以我想知道:
for我在其中执行一些.join操作的循环,我应该.persist()在循环内部还是在循环结束时使用?例如
for col in columns:
df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer').persist()
--> or <--
for col in columns:
df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer')
df_AA.persist()
Run Code Online (Sandbox Code Playgroud)
df_AA.unpersist()? sqlContext.read.some_thing(df_AA)?
我对此很陌生,所以请尽量解释清楚。
我在本地机器(8GB 内存)上运行,使用 jupyter-notebooks(anaconda);Windows 7的; 爪哇 8; 蟒蛇 3.7.1; pyspark v2.4.3