csv - hive 中的额外空行

标签 csv hadoop hive hql cloudera-cdh

我的项目涉及将数据从SQL数据库迁移到HDFS,然后创建将数据文件链接到表的Hive表。我正在通过将数据库内容导出到本地计算机上的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

最后,我正在运行一个从相同的shell脚本文件调用的hql脚本:
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文件(例如:vi table.csv),并在数据结尾后删除空白行。

带有CSV中的空行的配置单元表:
United States Barbados 130 United States Qatar 109 Australia United States 329 Australia India 310 NULL NULL NULL NULL
删除CSV中的空白行后的Hive表:
United States Barbados 130 United States Qatar 109 Australia United States 329 Australia India 310
最好的方法是使用“Sqoop”将数据从SQL数据库导入到Hive。 sqoop将处理模式,您也可以增量加载数据。
引用:https://sqoop.apache.org/docs/1.4.2/SqoopUserGuide.html#_importing_data_into_hive

关于csv - hive 中的额外空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51492814/

相关文章:

java - 在具有正确文件路径和权限的 Android 中找不到文件异常

php - 将 JSON 解析数组转换为 CSV

java - 用MiniDFSCluster对hadoop hdfs写的进行单元测试

hadoop - reducer 独立增量数

dataframe - 当分隔符可能丢失时,如何使用 CSV.read 将文件读取到 Julia 中的 DataFrame?

java - 用java编写时,仅在csv文件中添加一行

hadoop - Elasticsearch 用于索引多个数据库

sql - 是否可以更改Hive中分区表上的列的元数据?

csv - 将包含带引号的值的表导出到 hive 中的本地 csv

java - hive 错误:失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapRedTask返回代码2