将Pandas DataFrame转换为Hive表

3 投票
2 回答
7401 浏览
提问于 2025-04-18 07:20

我刚接触Python和Hive。

我希望能得到一些建议。

有没有人能给我一些关于如何把Python的pandas数据框转换成Hive表的技巧?

2 个回答

0

根据Jose Antonio Martin H的回答……我找不到简单的方法来做到这一点。我一直无法让Pandas的Dataframe.to_sql()和Cloudera的ODBC驱动程序一起工作。所以,因为我的情况比较特殊,我手动把Dataframe导出为CSV文件,然后在它上传到HDFS后,使用HUE/Hive导入工具来处理。

Jose的回答对我有帮助的地方在于使用了非逗号分隔符(其实是用的“|”,而不是“,”或“\t”),还有就是关闭了索引。这些做法似乎对整个过程有帮助。

我尝试过用parquet格式,但无论有没有压缩都无法成功——我原以为这可能是问题所在。而且“load data local inpath”也没有成功。

这只是我的一些经验,希望能对你有所帮助。如果我能让其中的某些部分通过编程成功运行,我会在这里告诉你。

(顺便说一下,我还不能评论,但希望分享我的经验能帮助到处于困境中的其他人。)

1

你的脚本需要在一个可以使用“本地加载数据”方法的机器上运行。

  1. 查询 pandas 数据框,创建一个列名和数据类型的列表。

  2. 使用 Python 字符串操作(基本上就是拼接)来写一个有效的 HQL(数据定义语言)创建表的语句。

  3. 在 Hive 中执行创建表的语句。

  4. 将 pandas 数据框写成用 "\t" 分隔的 CSV 文件,同时关闭表头和索引(查看 to_csv() 的参数)。

5.- 从你的 Python 脚本中调用一个运行 Hive 的系统控制台,命令是 -e:

Use: for instance:


p = subprocess.Popen( ['hive', '-e', str_command_list], stdout = subprocess.PIPE,
                                                        stderr = subprocess.PIPE )
out, err = p.communicate()

这将调用 Hive 控制台,并执行例如加载本地数据的命令,把你的 CSV 数据插入到创建的表中。

这样你就可以开心了。

撰写回答