pandas?dataframe寫(xiě)入到hive方式
pandas dataframe寫(xiě)入hive表
關(guān)鍵流程主要分為兩步:
1.將pandas dataframe轉(zhuǎn)換為sparkdataframe
這一步驟主要使用spark自帶的接口:
spark_df = spark.createDataFrame(pd_df)
2.將spark_df寫(xiě)入到hive的幾種方式
spark_df.write.mode('overwrite').format("hive").saveAsTable("dbname.tablename")
以下是一個(gè)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 有接口可以直接寫(xiě)入到hive spark_df.write.mode('overwrite').format("hive").saveAsTable("dbname.tablename") ''' 其中 overwrite 代表如果表中存在數(shù)據(jù),那么新數(shù)據(jù)會(huì)將原來(lái)的數(shù)據(jù)覆蓋,此外還有append等模式,詳細(xì)介紹如下: * `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 注冊(cè)為臨時(shí)表,之后通過(guò)sql的方式寫(xiě)到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 寫(xiě)入到 hive表的過(guò)程。
如何把dataframe直接保存到hive表中?
有多種方式把一個(gè)dataframe保存到hive表中:
1.直接把dataframe的內(nèi)容寫(xiě)入到目標(biāo)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.注冊(cè)一張臨時(shí)表,再通過(guò)sql語(yǔ)句插入到目標(biāo)表
df.createOrReplaceTempView("$tempTableName") spark.sql("insert into table dbName.$hive_table_name PARTITION($partition_column) select * from $tempTableName")
注意:
第2種方式可以指定寫(xiě)入的分區(qū),而臨時(shí)表會(huì)在任務(wù)完成時(shí)自動(dòng)清除,但最好是在不使用時(shí)主動(dòng)清除掉。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中類(lèi)似于jquery的pyquery庫(kù)用法分析
這篇文章主要介紹了Python中類(lèi)似于jquery的pyquery庫(kù)用法,結(jié)合實(shí)例形式分析了pyquery庫(kù)的概念、原理、使用方法及操作技巧,需要的朋友可以參考下2019-12-12對(duì)python 生成拼接xml報(bào)文的示例詳解
今天小編就為大家分享一篇對(duì)python 生成拼接xml報(bào)文的示例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12在python3中pyqt5和mayavi不兼容問(wèn)題的解決方法
今天小編就為大家分享一篇在python3中pyqt5和mayavi不兼容問(wèn)題的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01利用LyScript實(shí)現(xiàn)應(yīng)用層鉤子掃描器
Capstone 是一個(gè)輕量級(jí)的多平臺(tái)、多架構(gòu)的反匯編框架。本篇文章將運(yùn)用LyScript插件結(jié)合Capstone反匯編引擎實(shí)現(xiàn)一個(gè)鉤子掃描器,感興趣的可以了解一下2022-08-08用Python將IP地址在整型和字符串之間輕松轉(zhuǎn)換
這篇文章主要給大家介紹了利用Python將IP在整型和字符串之間輕松轉(zhuǎn)換的相關(guān)資料,文中還跟大家分享了Python下利用正則表達(dá)式來(lái)匹配校驗(yàn)一個(gè)字符串是否為ip地址的方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-03-03利用Python實(shí)現(xiàn)簡(jiǎn)易計(jì)算器的示例代碼
最近學(xué)習(xí)了字符串,運(yùn)算符,條件語(yǔ)句,循環(huán)語(yǔ)句,我在想可以用我最近學(xué)的東西做什么? 看到運(yùn)算我就想到了可以做一個(gè)簡(jiǎn)易的計(jì)算器,感興趣的可以了解一下2022-11-11Python連接Redis庫(kù)常見(jiàn)操作全面詳解
本文將介紹如何在Python中進(jìn)行Redis操作,包括連接Redis、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)檢索和其他常見(jiàn)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11