Hive 不支持通过群集创建SparkSQL表
根据Spark文档,支持配置单元语句CLUSTER BY。但是当我试图使用下面的查询从beeline创建一个表时Hive 不支持通过群集创建SparkSQL表,hive,apache-spark-sql,hiveql,Hive,Apache Spark Sql,Hiveql,根据Spark文档,支持配置单元语句CLUSTER BY。但是当我试图使用下面的查询从beeline创建一个表时 CREATE TABLE set_bucketing_test (key INT, value STRING) CLUSTERED BY (key) INTO 10 BUCKETS; 我得到以下错误 Error: org.apache.spark.sql.catalyst.parser.ParseException: Operation not allowed: CREATE TA
CREATE TABLE set_bucketing_test (key INT, value STRING) CLUSTERED BY (key) INTO 10 BUCKETS;
我得到以下错误
Error: org.apache.spark.sql.catalyst.parser.ParseException:
Operation not allowed: CREATE TABLE ... CLUSTERED BY(line 1, pos 0)
不知道我犯了什么错误。有什么帮助吗?您可以利用spark sql中的cluster by功能创建表、表联接等,它充当配置单元,以避免spark2.1+中的数据交换和排序 看 目前,配置单元无法识别此功能,因为spark和配置单元之间的元数据不兼容,所以即使在配置单元端识别此表,也不能使用相同的语法,因为它会将所有列视为数组 以下示例可能会给您一些想法: 准备来源 val df=0直到80000.mapi=>i,i.toString,i.toString.toDFitem_id,国家,州1 从源代码创建两个bucket表 您将看到哪个与Hive不兼容。向右滚动
df.write.bucketBy(100, "country", "state").sortBy("country", "state").saveAsTable("kofeng.lstg_bucket_test")
17/03/13 15:12:01 WARN HiveExternalCatalog: Persisting bucketed data source table `kofeng`.`lstg_bucket_test` into Hive metastore in Spark SQL specific format, which is NOT compatible with Hive.
df.write.bucketBy(100, "country", "state").sortBy("country", "state").saveAsTable("kofeng.lstg_bucket_test2")
加入他们并解释
由于音量较小,请先禁用广播连接
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("Spark SQL basic example").config("spark.sql.autoBroadcastJoinThreshold", "0").getOrCreate()
计划在SPARK 2.1.0中避免交换和排序,在SPARK2.0中避免交换,仅过滤和扫描证明数据局部性利用率
val query = """
|SELECT *
|FROM
| kofeng.lstg_bucket_test a
|JOIN
| kofeng.lstg_bucket_test2 b
|ON a.country=b.country AND
| a.state=b.state
""".stripMargin
val joinDF = sql(query)
scala> joinDF.queryExecution.executedPlan
res10: org.apache.spark.sql.execution.SparkPlan =
*SortMergeJoin [country#71, state#72], [country#74, state#75], Inner
:- *Project [item_id#70, country#71, state#72]
: +- *Filter (isnotnull(country#71) && isnotnull(state#72))
: +- *FileScan parquet kofeng.lstg_bucket_test[item_id#70,country#71,state#72] Batched: true, Format: Parquet, Location: InMemoryFileIndex[hdfs://ares-lvs-nn-ha/user/hive/warehouse/kofeng.db/lstg_bucket_test], PartitionFilters: [], PushedFilters: [IsNotNull(country), IsNotNull(state)], ReadSchema: struct<item_id:int,country:int,state:string>
+- *Project [item_id#73, country#74, state#75]
+- *Filter (isnotnull(country#74) && isnotnull(state#75))
+- *FileScan parquet kofeng.lstg_bucket_test2[item_id#73,country#74,state#75] Batched: true, Format: Parquet...
. 这是预期的行为。那么查询应该是什么来创建集群表呢?