Spark Scala创建外部配置单元表不使用位置作为变量

Spark Scala创建外部配置单元表不使用位置作为变量,scala,apache-spark,hive,external,Scala,Apache Spark,Hive,External,我试图从Spark应用程序创建配置单元外部表,并将位置作为变量传递给SQL命令。它没有创建配置单元表,我也没有看到任何错误 val location = "/home/data" hiveContext.sql(s"""CREATE EXTERNAL TABLE IF NOT EXISTS TestTable(id STRING,name STRING) PARTITIONED BY (city string) STORED AS PARQUET LOCATION '${location}

我试图从Spark应用程序创建配置单元外部表,并将位置作为变量传递给SQL命令。它没有创建配置单元表,我也没有看到任何错误

 val location = "/home/data"
 hiveContext.sql(s"""CREATE EXTERNAL TABLE IF NOT EXISTS TestTable(id STRING,name STRING) PARTITIONED BY (city string)  STORED AS PARQUET LOCATION '${location}' """)

Spark仅支持创建托管的表。即使这样,也有严格的限制:它不支持动态分区的表


TL;DR您可以通过Spark创建外部表格。Spark可以读取它们

Spark只支持创建管理的表。即使这样,也有严格的限制:它不支持动态分区的表


TL;DR您可以通过Spark创建外部表格。Spark可以阅读它们不确定哪个版本有此限制。 我使用Spark 1.6,Hive 1.1

我可以创建外部表,请按照以下步骤操作:

var query = "CREATE EXTERNAL TABLE avro_hive_table ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'TBLPROPERTIES   ('avro.schema.url'='hdfs://localdomain/user/avro/schemas/activity.avsc')    STORED AS INPUTFORMAT    'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'    OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'    LOCATION    '/user/avro/applog_avro'"
var hiveContext = new org.apache.spark.sql.hive.HiveContext(sc);

hiveContext.sql(query);
var df = hiveContext.sql("select count(*) from avro_hive_table");

不确定哪个版本有此限制。 我使用Spark 1.6,Hive 1.1

我可以创建外部表,请按照以下步骤操作:

var query = "CREATE EXTERNAL TABLE avro_hive_table ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'TBLPROPERTIES   ('avro.schema.url'='hdfs://localdomain/user/avro/schemas/activity.avsc')    STORED AS INPUTFORMAT    'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'    OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'    LOCATION    '/user/avro/applog_avro'"
var hiveContext = new org.apache.spark.sql.hive.HiveContext(sc);

hiveContext.sql(query);
var df = hiveContext.sql("select count(*) from avro_hive_table");

您是否尝试
hdfs dfs-ls/home/data
以确保未创建它?返回什么?您是否尝试
hdfs dfs-ls/home/data
以确保未创建它?返回什么?它不会通过Spark应用程序工作。但在内部工作Hive@GG更新了我的答案:记住这不会起作用。它不会通过Spark应用程序起作用。但会在内部起作用Hive@GG更新了我的答案:记住这是行不通的。