我想创建一个带分区的hive表。
该表的架构是:
val schema = StructType(StructField(name,StringType,true),StructField(age,IntegerType,true))
我可以使用以下方法使用Spark-SQL执行此操作:
val query = "CREATE TABLE some_new_table (name string, age integer) USING org.apache.spark.sql.parquet OPTIONS (path '<some_path>') PARTITIONED BY (age)"
spark.sql(query)
当我尝试使用Spark API(使用Scala)时,表中会填充数据。我只想创建一个空表并定义分区。这就是我在做什么,我做错了什么:
val df = spark.createDataFrame(sc.emptyRDD[Row], schema)
val options = Map("path" -> "<some_path>", "partitionBy" -> "age")
df.sqlContext().createExternalTable("some_new_table", "org.apache.spark.sql.parquet", schema, options);
我正在使用Spark-2.1.1。
答案 0 :(得分:1)
如果您跳过分区。可以尝试saveAsTable
:
spark.createDataFrame(sc.emptyRDD[Row], schema)
.write
.format("parquet")
//.partitionBy("age")
.saveAsTable("some_new_table")
Spark分区和Hive分区不兼容,因此如果您想从Hive访问,则必须使用SQL:https://issues.apache.org/jira/browse/SPARK-14927