0

CSV ファイルには、以下の乱雑な形式のユーザー調査が含まれており、文字列、int、範囲などのさまざまなデータ型が含まれています。

中国、20~30 歳、男性、xxxxx、yyyyy、モバイル開発者。zzzz-vvvv; 「$40,000-50,000」、コンサルティング

日本、30~40 歳、女性、xxxxx、ソフトウェア開発者、zzzz-vvvv; "$40,000-50,000"、開発

. . . . .

以下のコードは、CSV ファイルを各列にそれぞれの値が正しく割り当てられた Hive テーブルに変換するために使用されます。

add jar /home/cloudera/Desktop/project/csv-serde-1.1.2.jar;
drop table if exists 2016table;

create external table 2016table
(
  Country string,
  Age string,
  Gender string,
  Random1 string,
  Random2 string,
  Occupation string,
  Random3 string,
  Salary string,
  Industry string,
 )

 ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
 WITH SERDEPROPERTIES (
  "separatorChar" = ",",
  "quoteChar"     = "\"",
  "escapeChar"    = "\\"
 )     
 STORED AS TEXTFILE;

 LOAD DATA LOCAL INPATH "/home/cloudera/survey/2016edited.csv" INTO TABLE 2016table;

このコードは正常に機能し、各列はそれぞれの値で個別に割り当てられました。すべての Select クエリで真の結果が得られます。

上のテーブル ("2016table") から別のテーブル ("2016sort") を少ない列で作成しようとすると、異なる列で値が混在しています。

そのために使用されるコード

DROP TABLE IF EXISTS 2016sort;

CREATE EXTERNAL TABLE 2016sort (
 country1 string,
 age1 string,
 gender1 string,
 occupation1 string,
 salary1 string,
)

 ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
 WITH SERDEPROPERTIES (
 "separatorChar" = ",",
 "quoteChar"     = "\"",
 "escapeChar"    = "\\" 
)     
STORED AS TEXTFILE;

insert into table 2016sort select country,age,gender,occupation,salary from 2016table;

しかし、このコードは値を台無しにします。2016sortからgender1を選択すると、性別列の値と他の列の値が混在します。

何が欠けているかを理解するのを手伝ってくれる人はいますか!

4

1 に答える 1