当前位置: 首页 > 知识库问答 >
问题:

使用 API 而不是 SQL 从火花创建配置单元表?

沈开畅
2023-03-14

我想创建一个带有分区的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(使用斯卡拉)时,表中充满了数据。我只想创建一个空表并定义分区。这就是我正在做的事情,我做错了什么:

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。

共有1个答案

长孙承嗣
2023-03-14

如果您跳过分区。可以尝试使用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

 类似资料: