繁体   English   中英

Hadoop / Hive:在本地计算机上从.csv加载数据

[英]Hadoop/Hive : Loading data from .csv on a local machine

因为这是来自新手......

我为我设置了Hadoop和Hive,因此我可以在计算机上运行Hive查询来访问AWS集群上的数据。 我可以使用存储在计算机上的.csv数据运行Hive查询,就像我使用MS SQL Server一样吗?

如何将.csv数据加载到Hive中呢? 它与Hadoop有什么关系以及我应该运行哪种模式?

我应该关注什么设置,这样如果我做错了什么我总是可以回去在亚马逊上运行查询而不会影响之前为我设置的内容?

让我通过以下简单步骤为您完成工作:

脚步:

首先,使用csv文件中的字段名称在配置单元上创建一个表。 让我们举例来说,你的csv文件包含三个字段(id,name,salary),你想在hive中创建一个名为“staff”的表。 使用以下代码在配置单元中创建表。

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

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

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

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

hive> SELECT * FROM Staff;

谢谢。

如果你有一个配置单元,你可以直接使用Hdfs / s3中的Hive load命令放置本地数据集。

编写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-Loadingfilesintotables

有另一种方法来实现这一点,

  1. 使用hadoop hdfs -copyFromLocal将.csv数据文件从本地计算机复制到HDFS中的某个位置,比如'/ path / filename'

  2. 进入Hive控制台,运行以下脚本从文件加载,使其成为Hive表。 请注意,'\\ 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';

对于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 ;

您可以试试这个,以下是关于如何生成文件的几个示例。 工具 - https://sourceforge.net/projects/csvtohive/?source=directory

  1. 使用Browse选择一个CSV文件并设置hadoop根目录ex:/ user / bigdataproject /

  2. Tool使用所有csv文件生成Hadoop脚本,以下是生成的Hadoop脚本示例,用于将csv插入Hadoop

     #!/bin/bash -v 
    hadoop fs -put ./AllstarFull.csv /user/bigdataproject/AllstarFull.csv hive -f ./AllstarFull.hive

    \n\n

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

    \n\n

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

  3. 生成的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

只有在以下情况下才能将本地CSV文件加载到Hive:

  1. 您正在从其中一个Hive集群节点执行此操作。
  2. 您在非群集节点上安装了Hive客户端,并使用hivebeeline进行上载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM