如何使用 Python(不使用 PySpark)将 pandas 数据框插入现有的 Hive 外部表?

2023-12-13

我正在创建一个到 Hive 的连接字符串,并在该连接上的 Hive 表上运行一些 SELECT 查询。

对检索到的数据执行一些转换后,我正在创建一个数据框df_student_credits看起来如下

NAME_STUDENT_INITIAL    CREDITS_INITIAL     NAME_STUDENT_FINAL  CREDITS_FINAL   LOAD_DATE
John                    23                  John                25              21/03/2017
Alan                    19                  Alan                19              17/06/2018
Will                    24                  Will                26              02/08/2019
Lily                    25                  Lily                25              22/01/2019

现在,我想将此数据帧插入到我使用以下命令创建的 Hive 外部表中:

CREATE EXTERNAL TABLE IF NOT EXISTS school_db.student_credits
(
NAME_STUDENT_INITIAL STRING,
CREDITS_INITIAL STRING,
NAME_STUDENT_FINAL STRING,
CREDITS_FINAL STRING,
LOAD_DATE STRING
)
LOCATION '/user/gradebook/student_credits/';

我希望每次运行此脚本并生成数据帧时将插入内容附加到表中,而不是覆盖现有的表数据。

我看到的几乎每一篇文章都展示了使用 PySpark 执行此操作的方法。但我无法使用 PySpark,我必须使用与触发 SELECT 查询相同的 python 脚本来实现此目的。

我是 Hive 的新手,也是 Python 的新手。有人可以帮我解决这个问题吗?


看来您正在尝试从 Hive 表读入 pandas 数据帧并进行一些转换并将其保存回某个 Hive 外部表。请参考下面的代码作为示例。在这里,我已从 Hive 表读取到 pandas 数据框中,并向其中添加了一些日期列。后来我使用 subprocess 模块来执行我的 shell,它将数据加载到按某些日期列分区的 Hive 表中。

from pyhive import hive
import pandas as pd
import sqlalchemy
from sqlalchemy.engine import create_engine
import datetime
from subprocess import PIPE, Popen
import subprocess
import sys

conn = hive.Connection(host="yourhost.com", port=10000, username="vikct001")
cursor = conn.cursor()

query="select user_id,country from test_dev_db.test_data"

start_time= datetime.datetime.now()

output_file='/home/vikct001/user/vikrant/python/test_data.csv'

data=pd.read_sql(query,conn)
data['current_date'] = pd.datetime.today().strftime("%Y-%m-%d")
print(data)

data.to_csv(output_file, sep='|', encoding='utf-8',index=None)

hivequery=""" hive --hivevar loaded_date=$(date +"%Y-%m-%d") hive -e 'LOAD DATA LOCAL INPATH "/home/vikct001/user/vikrant/python/test_data.csv" INTO TABLE test_dev_db.test_data_external PARTITION (loaded_date="${hivevar:loaded_date}")';"""

def save_to_hdfs(output_file):
        print("I am here")
        p=subprocess.Popen(hivequery,shell=True,stderr=subprocess.PIPE)
        stdout,stderr = p.communicate()
        if p.returncode != 0:
            print stderr
            sys.exit(1)


save_to_hdfs(output_file)
end_time=datetime.datetime.now()

print 'processing ends', (start_time-end_time).seconds/60.0,' minutes'

表说明:

hive (test_dev_db)> desc test_dev_db.test_data_external;
OK
id                      int
country                 string
input_date              date
loaded_date             string

# Partition Information
# col_name              data_type               comment

loaded_date             string

您可以看到数据已加载并创建了具有当前日期的分区。

hive (test_dev_db)> show partitions test_dev_db.test_data_external;
OK
loaded_date=2019-08-21


hive (test_dev_db)> select * from test_dev_db.test_data_external;
OK
1       India   2019-08-21      2019-08-21
2       Ukraine 2019-08-21      2019-08-21
1       India   2019-08-21      2019-08-21
2       Ukraine 2019-08-21      2019-08-21
1       India   2019-08-21      2019-08-21
2       Ukraine 2019-08-21      2019-08-21
1       India   2019-08-21      2019-08-21
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Python(不使用 PySpark)将 pandas 数据框插入现有的 Hive 外部表? 的相关文章

随机推荐

  • 智能编译器是否可以在不成为语言一部分的情况下完成 std​​::move 所做的所有事情?

    这是一个有点理论上的问题 但是尽管我对 std move 有一些基本的了解 但我仍然不确定它是否为该语言提供了一些理论上无法通过超级智能编译器实现的附加功能 我知道这样的代码 std string s1 STL std string s2
  • Google 表格 - 将某个范围内的值重复“n”次

    I am trying to execute the following in google sheets by repeating certain cell values from a range of cells number of r
  • 无需连接即可获取 WiFi 的 SSID?

    我想连接到SSID应用程序中的 wifi 网络 Code WifiConfiguration conf new WifiConfiguration conf SSID networkSSID 但问题是我不知道network SSID 如何获
  • Flow 无法识别回调内的细化

    此代码通过了流程检查 flow function test list Array
  • 带有相应归属链接的随机背景图片?

    我有一个页面显示 5 张图像数组中的随机背景图像 我还想在页面底部提供该图像的适当归属链接 但我不确定如何使用 javascript 或 php 执行此操作 这就是我现在所拥有的
  • 隐式复制构造函数/赋值运算符的行为

    我有一个关于 C 标准的问题 假设您有一个带有用户定义的复制构造函数和赋值运算符的基类 派生类使用编译器生成的隐式类 派生类的复制 赋值是否调用用户定义的复制构造函数 赋值运算符 或者您是否需要实现调用基类的用户定义版本 感谢您的帮助 如果
  • R 基于应用于多列的多个部分字符串过滤行

    数据集样本 diag01 lt as factor c S7211 J47 J47 K729 M2445 Z509 Z488 R13 L893 N318 L0311 S510 A047 D649 diag02 lt as factor c
  • 序列化对象时忽略继承的类

    当我从一个类继承并序列化新类时 我获得了所有属性 我怎样才能防止这种情况发生 我无法控制我继承的类 所以我无法向其属性添加属性 XmlIgnore Example class A public string PropertyA get se
  • 用单个字符初始化字符串

    我想初始化一个std string具有单个字符 以下代码不起作用 int main string s c cout lt
  • 如何在asp.net core 3中设置json序列化器设置?

    旧版 ASP NET Core 应用程序的 json 序列化器设置是通过添加AddMvc AddJsonOptions 但我不使用AddMvc in asp net core 3 那么如何设置全局 json 序列化设置呢 AddMvc返回一
  • java中会话超时删除cookie

    我正在开发一个java web应用程序 我已经在其中配置了session timeout等于 4 分钟 此应用程序也使用 cookie 我的问题是 4 分钟不活动后 HttpSession 过期 但 cookie 仍保留在浏览器中 年龄设置
  • VBA:文本框新/下一行

    我的文本框需要一些帮助 我的文本框内容由单元格值提供 现在单元格值的构造如下 日期注释 并且它逐渐发生 我可以有多个这样的条目 基本上 我希望我的文本框将每个值显示为用户表单中文本框中的单行 使它们看起来像项目符号列表 这可能吗 我正在考虑
  • 带有 Material ui 和 Reactjs 的嵌套侧边栏菜单

    我正在尝试使用 Material ui 开发一个侧边栏菜单 我可以制作简单的列表 在我的项目中 我需要嵌套侧边栏菜单 但我无法实现 如果我尝试使用递归函数 它仅提供主标题菜单 而不呈现子元素 请帮我开发它 嵌套侧边栏菜单的代码如下 impo
  • 在 Apache Web 服务器上部署 Angular 4 应用程序

    我想在我的 Apache Web 服务器上部署我的 Angular 应用程序 我已经添加了一个 htaccess文件到我的 var www html文件夹中 我尝试了几个base hrefs 但和很多人一样 我在路由方面也遇到了问题 我只能
  • wp7 枢轴控制设置标题为空

    对于 PivotControl 我使用这样的代码将 Title 和 Header 属性设置为 null 但数据透视控件仍然在 Header 中显示一个字符串 其中包含为该 PivotItem 绑定的对象的名称 我想基本上隐藏 PivotIt
  • TikZ 中节点名称的模算术?

    假设我想在 TikZ 中构建一个循环图 具有可变数量的节点 标记为 v0 v1 v n 1 用于我选择的某个 n 例如 5 我希望能够使用 TikZ 中的 foreach 命令迭代地 1 定义节点 以及 2 连接节点 比方说 我希望能够将
  • Tomcat JDBC 连接池问题:“语句已关闭”

    我有一个使用 Tomcat JDBC 连接池的服务器应用程序 这是我用来创建数据源的代码 PoolProperties connProperties new PoolProperties connProperties setUrl reso
  • django模板中相关字段名称的使用

    我有两个模型 如下所示 class A models Model a models BooleanField default False q models BooleanField default False class B models
  • 如何识别和删除文本中任何类型的项目符号

    我正在从 MS Word 复制一些数据 该文本在复制的文本中可能包含也可能不包含项目符号 但我需要 javascript 中的正则表达式来从复制的文本中删除任何类型的项目符号 例如 如果我复制带有项目符号的文本 那么当我粘贴它时 它会像这样
  • 如何使用 Python(不使用 PySpark)将 pandas 数据框插入现有的 Hive 外部表?

    我正在创建一个到 Hive 的连接字符串 并在该连接上的 Hive 表上运行一些 SELECT 查询 对检索到的数据执行一些转换后 我正在创建一个数据框df student credits看起来如下 NAME STUDENT INITIAL