我有一个spark代码,它正试图写入hive ORC表Spark版本:2.2.0.2.6
我创建了一个数据帧,当我执行DF.show(10)
时,我可以看到数据和列也匹配。但当我尝试使用以下代码将其保存到蜂窝ORC表时。
DF.write.mode(SaveMode.Overwrite).format("orc").saveAsTable(hive_stgtableName)
或
DF.repartition(5).write.mode("Append").insertInto(hive_stgtableName_PReq)
我得到的错误如下。
Caused by: org.apache.hadoop.ipc.RemoteException: Path is not a file: /apps/dir1/dir2/dir3/dir4/mydb/hive_stgtableName
此hive_stgtableName指向
/apps/dir1/dir2/dir3/dir4/mydb/hive_stgtableName。
现在,每当我在重新创建配置单元表后运行此代码时,我都会得到随机目录,但同样的错误。
/apps/dir1/dir2/dir3/dir4/mydb/xx_1
/apps/dir1/dir2/dir3/dir4/mydb/xx_2
/apps/dir1/dir2/dir3/dir4/mydb/xx_3
我尝试了所有的桌面娱乐,但错误仍然存在。基本上,它对/apps/dir1/dir2/dir3/dir4/mydb/hive_stgtableName
同一级别的所有目录都是随机抛出错误
我的配置单元表语句位于下方
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.hive_stgtableName(
headertimestamp string,
recordtype string,
messageid string,
myattri_chn_updatesallowed string,
myattri_chn_messageid string,
myattri_chn_version string,
myattri_chn_identity string,
myattri_chn_system string,
myattri_chn_xmlns_ns2 string,
myattri_chn_xmlns_soap string,
myattri_chn_xmlns_ns3 string,
myattri_chn_xmlns_ns4 string,
syscontext_servgrp string,
syscontext_ntwk string,
syscontext_ch string,
syscontext_zone string,
syscontext_session string,
service_id string,
myval_contmyval_id string,
myval_contmyval_assetref_providerid string,
myval_contmyval_assetref_assetid string,
climyval_currentdatetime string,
climyval_terminaladdr_type string,
climyval_terminaladdr string,
climyval_targetcode_key string,
climyval_targetcode string,
placemtopp_id string,
placemtopp_serregref string,
hashed_header_id string,
input_file_name string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
'/apps/dir1/dir1/dir1/dir1/mydb/hive_stgtableName'
TBLPROPERTIES ('orc.compress'='SNAPPY');
知道是什么导致了这个错误吗。我尝试了很多谷歌搜索,但没有发现这个错误。
这里的问题是在读取文件(包含超过300个文件(时,在同一位置也有目录。Spark很奇怪,因为当我尝试执行DF.show(10(时,它仍然会向我显示正确的输出,但当我尝试将数据写入表时,它会抛出一个错误,每次它都会显示随机目录。因此,通过确保它只读取作为输入的文件,这个错误就消失了。
尝试
saveAsTable(mydb.hive_stgtableName)