我正在尝试通过spark sql将数据插入到外部配置单元表中。 我的蜂巢表通过一列存储。 创建外部配置单元表的查询是这个
create external table tab1 ( col1 type,col2 type,col3 type) clustered by (col1,col2) sorted by (col1) into 8 buckets stored as parquet
现在,我尝试将实木复合地板文件(存储在hdfs中)中的数据存储到表中。 这是我的代码
SparkSession session = SparkSession.builder().appName("ParquetReadWrite").
config("hive.exec.dynamic.partition", "true").
config("hive.exec.dynamic.partition.mode", "nonstrict").
config("hive.execution.engine","tez").
config("hive.exec.max.dynamic.partitions","400").
config("hive.exec.max.dynamic.partitions.pernode","400").
config("hive.enforce.bucketing","true").
config("optimize.sort.dynamic.partitionining","true").
config("hive.vectorized.execution.enabled","true").
config("hive.enforce.sorting","true").
enableHiveSupport()
.master(args[0]).getOrCreate();
String insertSql="insert into tab1 select * from"+"'"+parquetInput+"'";
session.sql(insertSql);
当我运行代码时,它抛出以下错误
预期的输入“ hdfs:// url:port / user / clsadmin / somedata.parquet”不匹配(第1行,pos 50)
== SQL == 插入UK_DISTRICT_MONTH_DATA中,从“ hdfs:// url:port / user / clsadmin / somedata.parquet”中选择* -------------------------------------------------- ^^^
at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:239)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:115)
at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
将配置单元执行引擎用作Tez和Spark有什么区别?
答案 0 :(得分:0)
您尝试过
LOAD DATA LOCAL INPATH'/ path / to / data'
覆盖表名称;
答案 1 :(得分:0)
在Hive中创建要指定的HDFS外部表。
create external table tab1 ( col1 type,col2 type,col3 type)
clustered by (col1,col2) sorted by (col1) into 8 buckets
stored as parquet
LOCATION hdfs://url:port/user/clsadmin/tab1
hive不必填充数据,同一应用程序或其他应用程序都可以将数据提取到该位置,并且hive通过定义位置的架构顶部来访问数据。
* == SQL == 插入UK_DISTRICT_MONTH_DATA中,从“ hdfs:// url:port / user / clsadmin / somedata.parquet”中选择* -------------------------------------------------- ^^^ *
parquetInput是实木复合地板HDFS文件路径,而不是Hive表名称。因此是错误。
有两种方法可以解决此问题:
LOAD DATA INPATH 'hdfs://url:port/user/clsadmin/somedata.parquet' INTO TABLE tab1