簡體   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