我想处理hdfs
中的数据,我正在尝试使用外部关键字创建表格,然后我收到以下错误,请您为此提供解决方案。
hive> create EXTERNAL table samplecv(id INT, name STRING)
row format serde 'com.bizo.hive.serde.csv.CSVSerde'
with serdeproperties (
"separatorChar" = "\t",
"quoteChar" = "'",
"escapeChar" = "\\"
)
LOCATION '/home/siva/jobportal/sample.csv';
我收到以下错误,请您为此提供解决方案
FAILED: Error in metadata: MetaException(message:Got exception: org.apache.hadoop.ipc.RemoteException java.io.FileNotFoundException: Parent path is not a directory: /home/siva/jobportal/sample.csv
答案 0 :(得分:1)
请您确认此路径是否在HDFS上?
有关在Hive中创建外部表的更多信息:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ExternalTables
答案 1 :(得分:0)
我在hive ---
中使用以下内容进行XML解析serdeCREATE EXTERNAL TABLE XYZ(
X STRING,
Y STRING,
Z ARRAY<STRING>
)
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"column.xpath.X"="/XX/@X",
"column.xpath.Y"="/YY/@Y"
)
STORED AS
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION '/user/XXX'
TBLPROPERTIES (
"xmlinput.start"="<xml start",
"xmlinput.end"="</xml end>"
);
答案 2 :(得分:0)
目前,Hive只允许您在添加分区时将目录设置为分区位置。您要在此处尝试将文件设置为分区位置。我使用的解决方法是首先添加一个具有虚拟/不存在目录的分区(Hive在将其设置为分区位置时不要求该目录存在),然后使用 alter表分区设置位置以将分区位置更改为所需文件。令人惊讶的是,在添加新分区时,Hive不会像设置现有分区的位置那样强制将该位置强制为目录。所以在你的情况下,它看起来像 -
alter table samplecv add partition (id='11', name='somename') location '/home/siva/jobportal/somedirectory'
alter table samplecv partition (id='11', name='somename') set location '/home/siva/jobportal/sample.csv'
答案 3 :(得分:0)
Hive总是希望位置路径中的目录名称而不是文件名。
在目录中创建您的文件,例如在/home/siva/jobportal/sample/sample.csv中,然后尝试在命令下运行以创建您的hive表。
create EXTERNAL table samplecv(id INT, name STRING)
row format serde 'com.bizo.hive.serde.csv.CSVSerde'
with serdeproperties (
"separatorChar" = "\t",
"quoteChar" = "'",
"escapeChar" = "\\"
)
LOCATION '/home/siva/jobportal/sample';
如果您收到任何错误,只需将您的文件放入hdfs并尝试,它应该可以正常工作。