pandas dataframe写入到hive方式
作者:taiguangxing
这篇文章主要介绍了pandas dataframe写入到hive方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
pandas dataframe写入hive表
关键流程主要分为两步:
1.将pandas dataframe转换为sparkdataframe
这一步骤主要使用spark自带的接口:
spark_df = spark.createDataFrame(pd_df)
2.将spark_df写入到hive的几种方式
spark_df.write.mode('overwrite').format("hive").saveAsTable("dbname.tablename")
以下是一个demo的完整代码:
import pandas as pd import numpy as np from pyspark import SparkContext,SparkConf from pyspark.sql import HiveContext,SparkSession from pyspark.sql import SQLContext pd_df = pd.DataFrame(np.random.randint(0,10,(3,4)),columns=['a','b','c']) spark = SparkSession.builder.appName('pd_2_hive').master('local').enableHiveSupport().getOrCreate() spark_df = spark.createDataFrame(pd_df) #spark dataframe 有接口可以直接写入到hive spark_df.write.mode('overwrite').format("hive").saveAsTable("dbname.tablename") ''' 其中 overwrite 代表如果表中存在数据,那么新数据会将原来的数据覆盖,此外还有append等模式,详细介绍如下: * `append`: Append contents of this :class:`DataFrame` to existing data. * `overwrite`: Overwrite existing data. * `error` or `errorifexists`: Throw an exception if data already exists. * `ignore`: Silently ignore this operation if data already exists. ''' #此外还可以将spark_df 注册为临时表,之后通过sql的方式写到hive里 spark_df.registerTempTable('tmp_table') tmp_sql = '''create table dbname.tablename as select * from tmp_table''' spark.sql(tmp_sql) spark.stop()
至此,便完成了pandas dataframe 写入到 hive表的过程。
如何把dataframe直接保存到hive表中?
有多种方式把一个dataframe保存到hive表中:
1.直接把dataframe的内容写入到目标hive表
df.write().mode("overwrite").saveAsTable("tableName"); 或 df.select(df.col("col1"),df.col("col2")) .write().mode("overwrite").saveAsTable("schemaName.tableName"); 或 df.write().mode(SaveMode.Overwrite).saveAsTable("dbName.tableName");
2.注册一张临时表,再通过sql语句插入到目标表
df.createOrReplaceTempView("$tempTableName") spark.sql("insert into table dbName.$hive_table_name PARTITION($partition_column) select * from $tempTableName")
注意:
第2种方式可以指定写入的分区,而临时表会在任务完成时自动清除,但最好是在不使用时主动清除掉。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。