我在本地系统中有一个图像文件(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/