如何解决spark写hive慢的问题
1个回答
展开全部
dataframe.registerTempTable("result")
sql(s"""INSERT OVERWRITE Table $outputTable PARTITION (dt ='$outputDate') select * from result""")
而整个结果数据的产生只需要4分钟左右的时间,比如以下方式:将结果以textfile存入hdfs:
result.rdd.saveAsTextFile(output_tmp_dir)
由此可见,对hive的写入操作耗用了大量的时间。
对此现象的优化可以是,将文件存为符合hive table文件的格式,然后使用hive load将产生的结果文件直接move到指定目录下。代码如下:
result.rdd.map { r => r.mkString("\001") }.repartition(partitions).saveAsTextFile(output_tmp_dir)
sql(s"""load data inpath '$output_tmp_dir' overwrite into table $output partition (dt='$dt')""")
sql(s"""INSERT OVERWRITE Table $outputTable PARTITION (dt ='$outputDate') select * from result""")
而整个结果数据的产生只需要4分钟左右的时间,比如以下方式:将结果以textfile存入hdfs:
result.rdd.saveAsTextFile(output_tmp_dir)
由此可见,对hive的写入操作耗用了大量的时间。
对此现象的优化可以是,将文件存为符合hive table文件的格式,然后使用hive load将产生的结果文件直接move到指定目录下。代码如下:
result.rdd.map { r => r.mkString("\001") }.repartition(partitions).saveAsTextFile(output_tmp_dir)
sql(s"""load data inpath '$output_tmp_dir' overwrite into table $output partition (dt='$dt')""")
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询