我想创建一个带有分区的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。
如果您跳过分区。可以尝试使用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
您的回应将不胜感激。谢了!
更新:恰恰相反。实际上,我们的表非常大,就像3个TB有2000个分区。3TB/256MB实际上会达到11720,但我们的分区数量与表的物理分区数量完全相同。我只想了解任务是如何在数据量上生成的。
添加/home/cloudera/date.jar到类路径添加资源:/home/cloudera/date.jar 请有人帮帮我,因为我是新来蜂巢的。有人能告诉我要遵循的步骤吗
我正在使用Spark SQL读取一个配置单元表,并将其分配给一个scala val 有什么方法可以绕过这个错误吗?我需要将记录插入到同一个表中。 嗨,我试着按建议做,但仍然得到同样的错误。