我写了2个Dataframe从Spark直接到Hive使用 PySpark
. 第一个df只有一行和7列。第二个df有20m行和20列。写1df(1row)需要10分钟,在第二个df中写1m行需要大约30分钟。我不知道要花多长时间来写整个20米,我杀死了代码才能完成。
我尝试了两种方法来编写df。我还缓存了df,看看它是否能加快写入速度,但似乎没有任何效果:
df_log.write.mode("append").insertInto("project_alpha.sends_log_test")
第二种方法
# df_log.registerTempTable("temp2")
# df_log.createOrReplaceTempView("temp2")
sqlContext.sql("insert into table project_alpha.sends_log_test select * from temp2")
在第二种方法中,我尝试同时使用这两种方法 registerTempTable()
以及 createOrReplaceTempView()
但在运行时间上没有差别。
有没有办法写得更快或更有效。谢谢。
3条答案
按热度按时间oprakyz71#
是否确定缓存了最终表?可能的问题是,在写入数据之前,它会计算整个管道。您可以在spark运行的终端/控制台中进行检查。
另外,请检查您在配置单元上附加到的表是否不是临时视图—然后可能是在附加新行之前重新计算视图的问题。当我向配置单元写入数据时,我总是使用:
请尝试:
wn9m85ua2#
尝试重新分区到少量文件,比如说like.repartition(2000),然后写入配置单元。spark中的大量分区有时需要时间来编写。
dohp0rv53#
它的坏主意(或设计)做插入到Hive表。您必须将其另存为文件并在其上创建一个表,或者将其作为分区添加到现有表中。
你能试试那条路吗。