hadoop/hive:从本地计算机上的.csv加载数据

f8rj6qna  于 2021-06-03  发布在  Hadoop
关注(0)|答案(6)|浏览(478)

因为这是来自一个新手。。。
我已经为我设置了hadoop和hive,所以我可以在我的计算机上运行hive查询,访问aws集群上的数据。我是否可以使用存储在计算机上的.csv数据运行配置单元查询,就像使用mssqlserver一样?
如何将.csv数据加载到配置单元中?它与hadoop有什么关系?我应该运行哪种模式?
我应该关心哪些设置,这样如果我做错了什么,我就可以随时返回并在amazon上运行查询,而不会影响之前为我设置的内容?

jutyujz0

jutyujz01#

只有在以下情况下,才能将本地csv文件加载到配置单元:
您正在从一个配置单元群集节点执行此操作。
您在非群集节点上安装了配置单元客户端,并使用 hive 或者 beeline 用于上载。

jm2pwxwz

jm2pwxwz2#

对于csv文件格式,数据将采用以下格式

"column1", "column2","column3","column4"

如果我们使用以''结尾的字段,那么每列将得到如下值。

"column1"    "column2"     "column3"     "column4"

如果任何列值 comma 作为一种价值观,它将根本不起作用。
因此,创建表的正确方法是使用opencsvserde

create table tableName (column1 datatype, column2 datatype , column3 datatype , column4 datatype)
ROW FORMAT SERDE 
'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
STORED AS TEXTFILE ;
xpszyzbs

xpszyzbs3#

还有另一种方法,
使用hadoop hdfs-copyfromlocal将.csv数据文件从本地计算机复制到hdfs中的某个位置,例如“/path/filename”
进入配置单元控制台,运行以下脚本从文件中加载,使其成为配置单元表。注意“\054”是八进制数中“逗号”的ascii码,表示字段分隔符。

CREATE EXTERNAL TABLE table name (foo INT, bar STRING)
 COMMENT 'from csv file'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '/path/filename';
9gm1akwq

9gm1akwq4#

让我为您介绍以下简单步骤:
步骤:
首先,使用csv文件中的字段名在配置单元上创建一个表。例如,您的csv文件包含三个字段(id、name、salary),您希望在配置单元中创建一个名为“staff”的表。使用下面的代码在配置单元中创建表。

hive> CREATE TABLE Staff (id int, name string, salary double) row format delimited fields terminated by ',';

其次,既然您的表是在hive中创建的,那么让我们将csv文件中的数据加载到hive上的“staff”表中。

hive>  LOAD DATA LOCAL INPATH '/home/yourcsvfile.csv' OVERWRITE INTO TABLE Staff;

最后,在配置单元上显示“staff”表的内容,以检查数据是否已成功加载

hive> SELECT * FROM Staff;

谢谢。

5fjcxozz

5fjcxozz5#

您可以尝试这样做,下面是一些关于如何生成文件的示例。工具--https://sourceforge.net/projects/csvtohive/?source=directory
使用browse和set hadoop root directory ex:/user/bigdataproject选择一个csv文件/
工具生成包含所有csv文件的hadoop脚本,下面是一个生成的hadoop脚本示例,用于将csv插入hadoop


# !/bin/bash -v

hadoop fs -put ./AllstarFull.csv /user/bigdataproject/AllstarFull.csv
hive -f ./AllstarFull.hive 

 hadoop fs -put ./Appearances.csv /user/bigdataproject/Appearances.csv hive -f ./Appearances.hive 

 hadoop fs -put ./AwardsManagers.csv /user/bigdataproject/AwardsManagers.csv hive -f ./AwardsManagers.hive

生成的配置单元脚本示例

CREATE DATABASE IF NOT EXISTS lahman; 
USE lahman; 
CREATE TABLE AllstarFull (playerID string,yearID string,gameNum string,gameID string,teamID string,lgID string,GP string,startingPos string) row format delimited fields terminated by ',' stored as textfile; 
LOAD DATA INPATH '/user/bigdataproject/AllstarFull.csv' OVERWRITE INTO TABLE AllstarFull; 
SELECT * FROM AllstarFull;

谢谢vijay

vaqhlq81

vaqhlq816#

如果您有一个配置单元设置,那么可以使用hdfs/s3中的hiveload命令直接放置本地数据集。
在编写load命令时,需要使用“local”关键字。
hiveload命令的语法

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

有关详细信息,请参阅下面的链接。https://cwiki.apache.org/confluence/display/hive/languagemanual%20dml#languagemanualdml-将文件加载到表中

相关问题