如何在 Impala 中存储图像文件
How to store Image file in Impala
我在本地系统中有一个图像文件(jpg 或 jpeg),我想存储在 Impala 数据库中,请帮助我,我该怎么做?
我认为您有几种解决方法,具体取决于您的具体要求。
1.使用配置单元
Hive 允许您在 Hive 中存储二进制数据 'database'。 Hive 类似于 Impala,虽然通常速度较慢但功能更多。
您可以在 table 定义中使用数据类型 BINARY
,并使用 LOAD DATA
加载图像。
这样的东西可能会起作用(未经测试)。
Create table images (picture binary);
LOAD DATA LOCAL inpath 'x/y/image.jpg' INTO TABLE images;
2。使用 Impala
Impaladoes 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 查询检索路径。
从远程位置获取文件需要您 运行 以下内容(更多信息 ):
ssh <user>@<host> "hadoop fs -get <hdfs_path> <os_path>"
then scp command to copy files
我在本地系统中有一个图像文件(jpg 或 jpeg),我想存储在 Impala 数据库中,请帮助我,我该怎么做?
我认为您有几种解决方法,具体取决于您的具体要求。
1.使用配置单元
Hive 允许您在 Hive 中存储二进制数据 'database'。 Hive 类似于 Impala,虽然通常速度较慢但功能更多。
您可以在 table 定义中使用数据类型 BINARY
,并使用 LOAD DATA
加载图像。
这样的东西可能会起作用(未经测试)。
Create table images (picture binary);
LOAD DATA LOCAL inpath 'x/y/image.jpg' INTO TABLE images;
2。使用 Impala
Impaladoes 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 查询检索路径。
从远程位置获取文件需要您 运行 以下内容(更多信息
ssh <user>@<host> "hadoop fs -get <hdfs_path> <os_path>"
then scp command to copy files