database - 如何在 Impala 中存储图像文件

标签 database image hadoop hdfs impala

我在本地系统中有一个图像文件(jpg 或 jpeg),我想存储在 Impala 数据库中,请帮助我,我该怎么做?

最佳答案

我认为您有几种方法可以解决此问题,具体取决于您的具体要求。

<强>1。使用配置单元

Hive 允许您将二进制数据存储在 Hive“数据库”中。 Hive 类似于 Impala,虽然通常速度较慢但功能更多。 您可以在表定义中使用数据类型 BINARY 并使用 LOAD DATA 加载图像。 这样的事情可能会起作用(未经测试)。

Create table images (picture binary); 
LOAD DATA LOCAL inpath 'x/y/image.jpg' INTO TABLE images;

<强>2。使用 Impala

黑斑羚 does not allow binary data .您可以做的是使用序列化-反序列化方法。这意味着您将图像转换为 String 格式,该格式仍包含将其转换回来所需的所有信息。一旦您需要在 HDFS 上检索图像,您将需要反序列化,这意味着将字符串转换为原始格式。

例如,使用 Python 会像这样工作:

import base64

def img_to_string(image_path):
    with open(image_path, "rb") as imageFile:
        image_string= base64.b64encode(imageFile.read())
        print image_string

def string_to_img(image_string):
    with open("new_image.png", "wb") as imageFile:
        imageFile.write(str.decode('base64'))

<强>3。仅使用 HDFS

通常不需要将数据存储在数据库中。您可以做的只是将图像放在 HDFS 中。如有必要,您可以将 HDFS 文件路径保存在数据库中。然后您可以使用 Impala 查询检索路径。 从远程位置获取文件需要您运行以下命令(更多信息 here ):

ssh <user>@<host> "hadoop fs -get <hdfs_path> <os_path>"
then scp command to copy files

关于database - 如何在 Impala 中存储图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42525049/

相关文章:

mysql - 在 MySql 数据集中使用 for 循环

javascript - HTML:触发onerror两次以显示替代图像的替代

php - Action Script 3 使用 Base64 解码从 mysql 加载图像,图像加载损坏

hadoop - 如何从Apache Spark中的压缩(.zip)本地文件制作数据集/数据框

hadoop - Sqoop - 数据拆分

mysql - SQL好友数据表查询

database - 无法恢复或备份 Odoo 数据库

hadoop - 无法使用 Apache Pig 过滤数据

mysql - 如何在 MySQL 中使用关键字 IN OR 内部连接 ​​3 个表?

php - laravel图像干预是压缩用户上传图像的好方法吗?