Csv 配置单元中的额外空行

Csv 配置单元中的额外空行,csv,hadoop,hive,hql,cloudera-cdh,Csv,Hadoop,Hive,Hql,Cloudera Cdh,我的项目涉及将数据从SQL数据库迁移到HDFS,然后创建配置单元表,将数据文件链接到表。我通过将数据库内容导出到本地计算机上的CSV文件来手动执行迁移,我使用winSCP将这些文件复制到hadoop edgenode。我正在运行以下命令: hadoop fs -mkdir /user/cloudera/project/database/table 接 hadoop fs -put /home/cloudera/project/table.csv /user/cloudera/project/d

我的项目涉及将数据从SQL数据库迁移到HDFS,然后创建配置单元表,将数据文件链接到表。我通过将数据库内容导出到本地计算机上的CSV文件来手动执行迁移,我使用winSCP将这些文件复制到hadoop edgenode。我正在运行以下命令:

hadoop fs -mkdir /user/cloudera/project/database/table

hadoop fs -put /home/cloudera/project/table.csv /user/cloudera/project/database/table/table.csv
最后,我运行一个hql脚本,该脚本从同一个shell脚本文件调用:

CREATE TABLE IF NOT EXISTS TABLE_NAME 
(
    FIELD_ONE STRING, 
    FIELD_TWO INT,
    ETC STRING
) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
STORED AS TEXTFILE
LOCATION '/user/cloudera/project/database/table'
tblproperties ("skip.header.line.count"="1");
出现的问题是,HDFS中的行数比SQL数据库中的行数多70行。我怀疑这个问题的原因是某些行被截断(行的剩余部分被带到下一行)。这会导致额外的行中包含完全错误的数据


是什么导致了这个问题,有没有解决办法?

这个问题是因为csv文件中有额外的空白新行。编辑任何编辑器中的CSV文件(对于EX:VI表.CSV),并在数据结束后删除空白行。 CSV中有空行的配置单元表:

美国巴巴多斯130
美国卡塔尔109
澳大利亚美国329
澳大利亚印度310
空值
空值

删除CSV中空白行后的P>HIVE表:

美国巴巴多斯130
美国卡塔尔109
澳大利亚美国329
澳大利亚印度310

最好的方法是使用“Sqoop”将数据从SQL数据库导入配置单元。sqoop将处理模式,您也可以增量加载数据。
请参阅:

它似乎与您用于导入数据的数据库有关?如果您使用的是DB2数据库,那么下面的参数将解决您的问题

sqoop import -D db2.jcc.charsetDecoderEncoder=3 

我要试试这个!但是,并非配置单元中的所有额外行都为空。有些也有不正确的信息。当然,如果问题仍然没有解决,您也可以将以“\n”子句结尾的行添加到表定义中。