根据Spark doc https://spark.apache.org/docs/2.1.0/sql-programming-guide.html#supported-hive-features,支持hive语句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 TABLE ... CLUSTERED BY(line 1, pos 0)
不确定我在做什么错。有什么帮助吗?
答案 0 :(得分:0)
你可以利用spark-sql中的cluster by feature来创建表,表连接等,这可以作为hive避免数据交换并在spark2.1 +
中排序请参阅https://issues.apache.org/jira/browse/SPARK-15453
目前,hive无法识别此功能,因为元数据在spark和hive之间不兼容,这就是为什么即使在hive端识别此表也无法使用相同的语法,这将是将所有列视为Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
...
}
}, 0, 1000);
以下示例可能会给您一些想法:
array
你会看到"它与Hive不兼容。"通过向右滚动
val df = (0 until 80000).map(i => (i, i.toString, i.toString)).toDF("item_id", "country", "state").coalesce(1)
首先禁用广播加入,因为音量很小。
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")
计划避免在SPARK 2.1.0中进行交换和排序,避免在SPARK2.0中进行交换,只过滤和扫描证明数据的位置利用率。
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("Spark SQL basic example").config("spark.sql.autoBroadcastJoinThreshold", "0").getOrCreate()